0
テキストファイルから1行ずつ読み込んで、対象のフォルダ内のファイルを再帰的に探したいと思っています。見つかった場合は、そのファイルを別のディレクトリにコピーします。以下のスクリプトは実行されますが、端末からsh script.sh
を実行すると、検索またはコピーは実行されません。エラーは表示されず、$line
可変文字列が各ループ反復に対して正しくエコーされます。 $list
変数の代わりに実際のファイル名を使用して端末から同じを実行すると、タスクは正常に完了します。シェルスクリプトtxtファイルからの検索とコピー
スクリプト:ファイル名の
script.sh
#!/bin/bash
file="filenames.txt"
while IFS= read line
do
find /Volumes/share/all-files-location -name "$line" -print -exec cp {} /Volumes/share/found-files-location \;
done < "$file"
リスト、プレーンテキスト:
A1037_MG_1262.jpg
A1037_MG_12621.jpg
A1037_MG_1263.jpg
[11,000 more entries]
思考?
これは私のマシンで正常に動作しているようですが、ブートドライブに実際に存在するものにパスとファイル名を調整しています。すべてのパスが正しいと確信していますか? –
また、問題のファイルへのパスにはスペースやその他の特殊文字が含まれていますか? –
コピーするファイルに空白がありません。 "〜/デスクトップ/テストフォルダ/すべてのWebの写真を検索する"という名前のスクリプトを$ line "-print -exec cp {}〜/ Desktop/test-folder/found \;"どちらも問題なく動作しません。ターミナルウィンドウで変数ではなくファイル名を指定してfindコマンドを実行すると、パスが正しく実行され、パスが正しいことがわかります。 – Brett