ファイルのリストがあり、1つのコマンドでそれらを移動します

ファイルのリストがあり、1つのコマンドでそれらを移動します

いくつかの検索条件に基づいて多数のファイルを検索するコマンドを実行しました。次のようにファイルが返されます。

./somepath/somepath/file.something
./asdf/asdf/s.php
./etc/a.php
./a/b/c/d/e/f/g.jpg

そこで、この出力をファイルにキャプチャする場合 (つまり、1 行につき 1 つのファイル)、ファイルを反復処理してファイルを 1 つずつ指定したディレクトリに移動するコマンドの作成を手伝ってくれる人はいませんか?

よろしくお願いします。

答え1

while read -r filename
  do
  mv -- "$filename" directory
done < list_of_files.txt

テストは行われていません (Windows を実行している仕事用 PC を使用しています) が、動作するはずです。

答え2

your_command | xargs -I% mv "%" dest_dir

コマンドが null であるかfind、ファイル名を null で終了する方法がある場合:

your_command | xargs -0 -I% mv "%" dest_dir

または

find [find-args] -print0 | xargs -0 -I% mv "%" dest_dir

ファイル名の終了に null を使用すると、スペースや改行などが含まれる可能性があるファイル名でも機能できるようになります。

xargsすでにファイルを作成している場合は、 を使用してファイルを処理することもできます。

xargs -a filename -I% mv "%" dest_dir

答え3

ファイル名に空白が含まれていない場合の別のオプションは、

mv `search_command_here` dest_directory

(バックティック構文も bash のものですが、質問ではこれが Linux 上で行われ、すべての主要な Linux ディストリビューションがデフォルトで bash を使用することが明記されています。)

関連情報