ファイルのリストが大量にあり、それらが Linux サーバーのどこかにあるかどうかを確認する必要があります。それらのいくつかはそうかもしれませんし、そうでないかもしれません。
これを行うコマンドラインツールはありますか?
それとも、シェル スクリプトで find をループする必要がありますか?
find の使用に依存する別の方法があります。find を一度実行し、すべてのファイル名を保存してから、それらをファイルのリストと比較するという考え方です。
まず、ファイルのリストをソートする必要があります: sortedFiles.txt と呼びましょう
走る
find / -type f | xargs -n1 -I@ basename '@' | sort -u > /tmp/foundFiles.txt
それらを比較し、最初のファイルにあるものだけを印刷し、2 番目のファイルには印刷しない
comm -23 /tmp/sortedFiles.txt /tmp/foundFiles.txt
これにより、コンピューターにないものがわかります。
コンピューターにあるものが必要な場合は、次を使用します。
comm -12 /tmp/sortedFiles.txt /tmp/foundFiles.txt
これにより、コンピューターにあるものがわかります。欠点は、それらがどこにあるのかわからないことです。:)
または、検索を実行します。
find / -type f > /tmp/allFiles.txt
次に、grep を使用して繰り返し、最後の / の行末と一致することを確認します。
cat /tmp/filesToFind.txt | xargs -n1 -I@ egrep '/@$' /tmp/allFiles.txt
これにより、見つかったファイルの場所のみが印刷されますが、見つからないファイルは印刷されません。
--dmg
ループを実行する場合は、find ではなくlocate を使用することをお勧めします。それはより速いです!
lista に使用できるファイル名が含まれている場合:
cat lista | xargs locate