
いくつかの検索条件に基づいて多数のファイルを検索するコマンドを実行しました。次のようにファイルが返されます。
./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 を使用することが明記されています。)