MP3ファイルを含むディレクトリがたくさんあります。これらのディレクトリには、内部に他のディレクトリは含まれていません。
ファイルを削除せずにすべてのディレクトリ構造を削除する方法は?
これはデフォルトでそのディレクトリ内のすべてのファイルを現在のディレクトリに移動します。現在のディレクトリは、他のディレクトリがあるディレクトリです。
答え1
単find
一直線性:
find . -mindepth 2 -type f -execdir sh -c 'mv -vt ../ "$@" ; rmdir "$PWD"' _ {} +
-mindepth 2
find
コマンドは現在のディレクトリのファイルを無視します。-execdir
ここでこれが重要です。これにより、find
現在のディレクトリがファイルを含むディレクトリに変更され、その中のコマンドがそのディレクトリ自体で実行されます。mv -vt ../ "$@"
、次に展開されます。mv -vt ../ "file1" "file 2" "..." "fileN"
rmdir "$PWD"
ディレクトリが削除され、-execdir
すべてのファイルがディレクトリに移行された後に実行されます。親ディレクトリ。
注意してください同じファイル名を持つファイルは、ターゲットパスに移動しても上書きされません。
答え2
parent="$PWD"
for dir in *; do
test -d "$dir" || continue
pushd "$dir" || continue
mv -i -- * "$parent"
popd
rmdir "$dir"
done