シェルコマンドでディレクトリ名の後のスラッシュ(/)

シェルコマンドでディレクトリ名の後のスラッシュ(/)

ここに小さな問題があります。

2つのファイルがあるfileafileb言うとmv filea fileb

  • 削除fileb
  • filea次に名前を変更するfileb

diraしたがって、2つのディレクトリがあり、dirbmv dira dirb

  • 引っ越す(なるでしょうdiradirbdirb/dira

どちらの場合も、通知やメッセージがないことを確認すると、これは非常に一貫性がないようです。私の考えでは、コンテンツで上書きするmv dira dirb必要があると思います(または名前付きディレクトリの下に2つのディレクトリをマージ)。dirbdiradirb

スラッシュのあるディレクトリ名(例dira/:)はディレクトリとして扱われ、スラッシュのない名前(例dira:)はファイルとして扱われるという内容(もちろんある程度)を読んだ記憶になります。とにかく、スラッシュを使ってシェル(zshとおそらくbash)が私のディレクトリ表記を尊重したいと思います。これを強制できる端末オプションはありますか?

明確にするために、これが私が望む動作です。

  • mv dira dirb結果dirbはコンテンツで上書きされます。dira
  • mv dira dirb/結果は(から)diraに移動されます。dirbdirb/dira

私と同じ考えを持つ人はいますか?それとも私だけ変なのかな?

ベストアンサー1

はい、これはGNUツール間でわずかに一貫性がありません。

提案の 1 つの問題は、空でないディレクトリを削除できないことです。それ以外は-T(GNU領域ではとにかく)おおよそのものです(最初の場合)。

$ ls dira/ dirb/
dira/:
a

dirb/:
b
$ mv -iT dira/ dirb/
mv: overwrite `dirb/'? y
mv: cannot move `dira/' to `dirb/': Directory not empty
$ rm dirb/b 
$ mv -iT dira/ dirb/
mv: overwrite `dirb/'? y
$ ls dira/ dirb/
ls: cannot access dira/: No such file or directory
dirb/:
a

おすすめ記事