ファイル名(または本文)に文字列を含む複数のファイルを見つけて、すべて特定のフォルダに移動するにはどうすればよいですか。

ファイル名(または本文)に文字列を含む複数のファイルを見つけて、すべて特定のフォルダに移動するにはどうすればよいですか。

仮説 - ファイル名に「heavengames」という単語を含む複数の個々のディレクトリにあるすべてのHTMLファイル(2番目の質問で、本文に「heavengames」という単語を含むすべてのHTMLファイル)を名前に移動するにはどうすればよいですか?新しいディレクトリを作成したい場合はどうすればよいですか? 「パラダイスゲームスレッド」?

答え1

名前にこの単語を含むファイルを移動するには:

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

テキストに単語を含むファイルを移動するには:

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.seeを使用してください。ラッシュの答え

関連情報