ここで少し質問があります。
filea
とfileb
のように2つのファイルがある場合、mv filea fileb
は
fileb
filea
の名前をfileb
に変更します次に、2つのディレクトリ、たとえばdira
とdirb
がある場合、mv dira dirb
は
dira
をdirb
に移動します(dirb/dira
になります)どちらの場合も通知やメッセージがないことに注意してください。これは私にはかなり矛盾しています。 mv dira dirb
はdirb
をdira
の内容で上書きする(またはdirb
という名前のディレクトリの下にある2つのディレクトリをマージする)必要があると思います。
スラッシュのあるディレクトリ名(dira/
など)はディレクトリのように扱われ、スラッシュのない名前(dira
など)はファイルのように扱われることをどこかで読んだことを覚えています(ある程度、コース)。とにかく今、私はシェル(zshとおそらくbash)にスラッシュを使ってディレクトリの表記を尊重させたいと思っています。それを強制できるようにするターミナルオプションはありますか?
明確にするために、これが私の望ましい振る舞いです:
mv dira dirb
の結果、dirb
はdira
の内容で上書きされますmv dira dirb/
の結果、dira
はdirb
に移動されます(dirb/dira
内)誰かが私と同じように考えたことがありますか?それとも私はただ変ですか?
はい、これは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
すべてをdiraからdirbに移動したいだけの場合は、_mv dira/* dirb
_を実行できます。
HP-UXのmvmanページによる。
_The mv command moves:
_
+ One or more directory subtrees (directory1, [directory2, ...]) to a new or existing directory (dest-directory).