次のコマンドを実行するとき:
mv -v foo /mnt/bar
ディレクトリfoo
とすべてのサブコンテンツがこのディレクトリに移動されます/mnt/bar
。ファイルの移動順序は次のとおりです。目次注文する( ls -U
)。
同じことをしながら、サブファイル/ディレクトリをfoo
アルファベット順に移動する良い方法はありますか?
find -exec mv
子コンテンツをアルファベット順に繰り返すために使用できることはわかっていますが、ターゲットで同じサブディレクトリ構造を維持するには、いくつかの面倒な作業が必要です。 GNUにフラグがあったらと思いますが、mv
マニュアルページには役に立つものはありません。
答え1
$ \ls foo | xargs -I% mv -v foo/% bar
'foo/one' -> 'bar/one'
'foo/sie' -> 'bar/sie'
'foo/two' -> 'bar/two'
'foo/uve' -> 'bar/uve'
'foo/wox' -> 'bar/wox'
'foo/zanzibar' -> 'bar/zanzibar'
ls
項目をアルファベット順にリストするために使用されます。純粋に実行されていることを確認するにはls
(.bashrcまたは.bash_aliasesに隠されたエイリアスとして追加された追加の文字なし)、コマンドを.bashrcまたは.bash_aliasesとして実行します\ls
。ls
次に出力を送信xargs
- 各項目に変数とともに変数名を指定します
-I
(これはmv
コマンドで「表示」できる情報を提供します) - アイテム(と呼ばれる
%
)をその場所からfoo
新しいターゲットに移動します。
答え2
サポート対象:zsh
pax
-0
printf '%s\0' foo foo/**/*(D) | pax -0rwdv /mnt/bar/ && rm -rf foo
これらの再帰グローブは各レベルで語彙的にソートされます(ロケールの照合順序を使用)。a
前にa/a
前に…a/b
b
find foo -print0 | sort -z
フルパスの並べ替えとは異なります。たとえば、次のようになります。
a
a/b
a/b.c
a/b/c
代わりに、Cロケールでは次の順序で進みます。
a
a/b
a/b/c
a/b.c
zsh
グループを形成します。