web-dev-qa-db-ja.com

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

ここで少し質問があります。

fileafilebのように2つのファイルがある場合、mv filea fileb

  • 削除fileb
  • fileaの名前をfilebに変更します

次に、2つのディレクトリ、たとえばdiradirbがある場合、mv dira dirb

  • diradirbに移動します(dirb/diraになります)

どちらの場合も通知やメッセージがないことに注意してください。これは私にはかなり矛盾しています。 mv dira dirbdirbdiraの内容で上書きする(またはdirbという名前のディレクトリの下にある2つのディレクトリをマージする)必要があると思います。

スラッシュのあるディレクトリ名(dira/など)はディレクトリのように扱われ、スラッシュのない名前(diraなど)はファイルのように扱われることをどこかで読んだことを覚えています(ある程度、コース)。とにかく今、私はシェル(zshとおそらくbash)にスラッシュを使ってディレクトリの表記を尊重させたいと思っています。それを強制できるようにするターミナルオプションはありますか?

明確にするために、これが私の望ましい振る舞いです:

  • mv dira dirbの結果、dirbdiraの内容で上書きされます
  • mv dira dirb/の結果、diradirbに移動されます(dirb/dira内)

誰かが私と同じように考えたことがありますか?それとも私はただ変ですか?

14
phunehehe

はい、これは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
11
user601

すべてを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).

0
Hemant