1

ファイルのリストが大量にあり、それらが Linux サーバーのどこかにあるかどうかを確認する必要があります。それらのいくつかはそうかもしれませんし、そうでないかもしれません。

これを行うコマンドラインツールはありますか?

それとも、シェル スクリプトで find をループする必要がありますか?

4

3 に答える 3

1

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

于 2013-04-30T10:16:39.390 に答える
0

ループを実行する場合は、find ではなくlocate を使用することをお勧めします。それはより速いです!

lista に使用できるファイル名が含まれている場合:

cat lista | xargs locate
于 2013-04-30T10:07:05.413 に答える