コンテンツを削除せずにサブディレクトリを削除しますか? [コピー]

コンテンツを削除せずにサブディレクトリを削除しますか? [コピー]

多くのアルバムと個々のトラックを含むMusicというディレクトリがあります。そのうちのいくつかはサブディレクトリにあります。私が望むのは、このフォルダを削除し、音楽ディレクトリ内のすべてのトラックを分離せずにミックスすることです。

手をつけるのが難しいので、少し探してみてください。注文する。

答え1

いいえfind

shopt -s globstar
mv -nv **/*.mp3 /path/to/common/directory

答え2

find . -mindepth 1 -type f -exec mv -i "{}" /common/path \;
find . -mindepth 1 -d -type d -exec rmdir "{}" \;

これにより、現在のディレクトリのすべての音楽が移動され、/common/path2番目のディレクトリはすべてのディレクトリが削除されます。その後、すべてを元のディレクトリに戻すことができます。

また、同じ名前のファイルを上書きするように求められます。

答え3

find /path/to/music/ -type f -execdir mv -n "{}" /path/to/sharedmusic/ \;

名前が重複したファイルはいいえ移動されますが、元の位置に保持されます。

答え4

サブディレクトリ内のすべてのファイルの検索を完了し、findコマンドを実行してそのファイルを現在のディレクトリに移動できます。

以下の回答で例を見つけることができます。 https://stackoverflow.com/questions/22388480/how-to-pipe-the-results-of-find-to-mv-in-linux

答えを引用すると、次のようになります。https://stackoverflow.com/a/22388545/879882

xargs通常、この目的に使用され、それを容易にするオプションがmvあります。-t

find ./ -name '*article*' | xargs mv -t ../backup

findサポートしていれば-exec ... \+あなたもできます

find ./ -name '*article*' -exec mv -t ../backup {}  \+

この-tオプションはGNU拡張です。もちろん自分で始めることもできます。

find ./ -name '*article*' -exec sh -c 'mv "$@" "$0"' ../backup {} \+

私たちは、次の最初のパラメータがsh -c 'commands'「スクリプト名」パラメータで終わり、必要では$0ないという便利な事実を恥ずかしく乱用しましたshift

関連情報