サブフォルダー X1 、 X2 、および X3 を含む親フォルダー X があります ....これらの各サブフォルダーには音楽ファイルが含まれます。これらのファイルをメインフォルダー X に移動し、サブフォルダー X1、X2 などを削除したいと思います。
ターミナル(mac)でそれを行うにはどうすればよいですか?
100 万前もって感謝します。
これを行うには、おそらくスクリプト全体は必要ありません。コマンドラインから実行できるはずです。移動したいすべての音楽ファイルが .mp3 で終わり、他のファイル (移動したくないファイル) がそのように終わっていないとします。その場合は、cd を使用してディレクトリ X に入り、次を実行します。
mv X1/*.mp3 .
...他の 2 つのサブディレクトリについても同様です。
または、すべてのファイルを同時に実行する場合は、次のようにします。
i=0; while [ $i -lt 3 ]; do i=$(( $i + 1 )); mv X$i/*.mp3 .; done
「-lt」の後の数字は、ファイルを抽出する最終ディレクトリのサフィックスです。
完了したら、使用できます
rmdir X1
ディレクトリが空の場合はディレクトリを削除するか、または
rm -r X1
そうでない場合。次のように、上記のワンライナーに組み込むこともできます。
i=0; while [ $i -lt 3 ]; do i=$(( $i + 1 )); mv X$i/*.mp3 .; rm -r X$i; done
...そうする前に、保持したいディレクトリに他に何もないことを確認してください。
更新: サブディレクトリの名前が体系的に付けられていない場合は、別の方法があります。親ディレクトリのすべてのサブディレクトリからファイルを抽出する場合、これはエラーなしでのみ機能することに注意してください。
for i in `ls -l | egrep '^d'| awk '{print $10}'`; do mv $i/*.mp3 .; done
最上位ディレクトリにファイルがあり、「X」を削除できないというエラーがある場合、次のようにいくつかのエラー メッセージが出力されますが、無視しても問題ありません。
find X -type f -exec mv {} X \; # Move all files into X
find X -depth -type d -exec rmdir {} \; # Remove all subdirectories of X
これにより、すべてのファイルが移動されます。ファイルを特定のセットに制限する場合は-name
、最初のコマンドで (またはその他の) 修飾子を使用find
して、移動するファイルをフィルタリングします。