複数のフォルダを次のような構造に整列したいと思います。
たとえば、
/root/sub1/aaaa/bbbb/cccc/dddd
/root/sub2/aaaa/bbbb/cccc/dddd
/root/sub3/aaaa/bbbb/cccc/dddd
/root/sub4/aaaa/bbbb/cccc/dddd
これは、次のフォルダ以外には何も含めない入れ子になったフォルダです。
この道を断りたい
/root/sub1/dddd
/root/sub2/dddd
/root/sub3/dddd
/root/sub4/dddd
フォルダをルートレベルのフォルダに移動するのではなく、親フォルダのすぐ下に移動したいと思います。
実行するのに最適なコマンドは次のとおりです。
mv sub*/aaaa/bbbb/cccc/dddd
しかし、これを行うと、すべてがルートレベルに戻ります。
あるいは、各サブフォルダでコマンドを実行することもできますが、それでも退屈です。
mv aaaa/bbbb/cccc/dddd
ベストアンサー1
ファイルは異なるディレクトリに存在する必要があるため、このタスクをmv
複数回実行する必要があり、各ターゲットディレクトリに対して少なくとも1回は実行する必要があります。以下を実行してmv
これを実行できます。forループ。
for x in /root/*
do
mv -i "$x"/*/*/*/* "$x"
done
mv
ディレクトリ内の各項目に対して、ループ(コマンド)の本文を順番に実行します。/root
ループ本体が実行されるたびに"$x"
パスに置き換えられます/root/subN
。このコマンドは、ファイルが移動されたディレクトリにmv -i "$x"/*/*/*/* "$x"
ファイルを移動します。/root/sub1/aaaa/bbbb/cccc/dddd
/root/sub1
/root/sub1/dddd
オプションを使用すると、ターゲットファイルがすでに存在するかどうかを尋ねられます。これはとが-i
ある場合にmv
発生する可能性があります。/root/sub1/aaa1/bbb/ccc/ddd
/root/sub1/aaa2/bbb/ccc/ddd