複数のサブディレクトリで、特定の拡張子を持つすべてのファイルを1つのディレクトリに移動します。

複数のサブディレクトリで、特定の拡張子を持つすべてのファイルを1つのディレクトリに移動します。

複数のディレクトリに多くの.zipファイルがあります。

Fol1/Fol2
Fol3
Fol4/Fol5

共通のデフォルトフォルダにすべて移動するにはどうすればよいですか?

答え1

cd …zipファイル()を含むツリーの最上位ディレクトリに移動して、次を実行します。

mv **/*.zip /path/to/single/target/directory/

これはzshですぐに利用できます。シェルがbashの場合は、shopt -s globstar最初に実行する必要があります(このコマンドをシェルに入れて入れる必要があります~/.bashrc)。シェルがkshの場合は、最初にset -o globstar実行(に入れる必要があります~/.kshrc)する必要があります。

またはfind特別な準備なしでどこでも使用できますが、より複雑なものを使用してください。

find . -name '*.zip' -exec mv {} /path/to/single/target/directory/ \;

後で空のディレクトリを削除するには、zsh で次のようにします。

rmdir **/*(/^Fod)

Bashまたはkshから:

rmdir **/*/

そして、削除する必要がある空のディレクトリがある限り繰り返します。またはどのシェルでも

find . -depth -type d -empty -exec rmdir {} \;

答え2

ファイルを移動したい場合は、.zip次のようにできます。

mkdir ./zipfiles
find . -name "*.zip" -exec mv "{}" ./zipfiles \;

答え3

これはデータの移動時に安全でエラーがなく、バージョンに関係なくほとんどのディストリビューションをサポートします。このコマンドはサブディレクトリを検索し、新しいターゲットディレクトリに移動またはコピーします。

find . -name *.flac -exec mv '{}' "./flac/" ";"
  • 移動したいファイルを含むサブディレクトリを含むホームディレクトリでこのコマンドを実行します。
  • そこからあなたの状況に*.flac似たものに変更することができます。*.zipあるいは*.doc、どんな拡張でも可能です。
  • mvファイルを移動するコマンド、または移動の代わりにデータコピーを使用できますcp
  • ./flac/すべてのFLACファイルを移動したいターゲットディレクトリ。次のようにフルパスを提供することもできます。/home/myid/flac/

完全な例。 (この場合、音楽アーティスト名を持つ多くのサブディレクトリがあり、/home/myid/Music/FLACファイルは別のサブディレクトリレベルにあります。アーティストフォルダは必要ありませんが、すべてのFLACファイルを1つのディレクトリに入れたいからです。/home/myid/Music/flac/

cd /home/myid/Music
mkdir flac
find . -name *.flac -exec mv '{}' "./flac/" ";"
cd flac
ls

これにより、すべてのFLACファイルが表示されます。

答え4

findとmvのGNUバージョンがあると仮定すると、以下は既存の検索ベースの回答よりも効率的です。

find . -name '*.zip' -exec mv --target-directory='/path/to/outputdir' '{}' +

+find -execの最後にaを使用すると、見つかった各ファイルに対してmvコマンドを実行するのではなく、ファイルのリストがmvコマンドに渡されます。しかし、これに対する1つの制限は、コマンドの末尾に「{}」だけを入れることができるということです。これには、mv --target-directoryオプションを使用する必要があります。これは私が知っている限りGNU-ismです。

関連情報