ファイル名 (または本文) に文字列が含まれる多数のファイルを検索し、それらのファイルをすべて特定のフォルダーに移動するにはどうすればよいでしょうか?

ファイル名 (または本文) に文字列が含まれる多数のファイルを検索し、それらのファイルをすべて特定のフォルダーに移動するにはどうすればよいでしょうか?

たとえば、ファイル名に「heavengames」という単語が含まれる複数の独立したディレクトリ内のすべての HTML ファイル (および 2 番目の質問として、本文に「heavengames」という単語が含まれるすべての HTML ファイル) を「heavengames-threads」という名前の新しいディレクトリに移動したい場合はどうすればよいでしょうか。

答え1

名前に単語が含まれるファイルを移動するには:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -iname "*heavengames*" \
-exec mv -t /path/to/heavengames-threads {} \+

本文に word が含まれるファイルを移動するには:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -exec grep -q heavengames {} \; \
-exec mv -t /path/to/heavengames-threads {} \+

ps. すべてが正しいことを確認するには、最初の実行時にechobeforeを追加します。mv

答え2

zsh または bash ≥4 の場合、ファイル名に基づいて:

mkdir heavengames-threads
mv **/*heavengames*.html heavengames-threads/

より柔軟にするには(例えば、ディレクトリ階層を再作成するには、zmv(があるこのサイトには多くの例があります)。

ファイルの内容を検索するために使用しますgrep。GNU ユーティリティの最新バージョン (つまり、非組み込み Linux または Cygwin) の場合:

grep -RZ heavengames . | xargs -0 mv -t heavengames-threads/

より移植性の高いコマンドについては、 を使用してくださいfindラッシュの答え

関連情報