システム内のすべてのファイルをスキャンしたいと思います。これを行うには、システム上のすべてのファイルへのフルパスが必要です。私の初期のアイデアは、次のようにすることでした。
for file in $(sudo find / ); do
if [ -d $file ]; then
and so on.
しかし、findの出力をこのように処理することは悪い習慣であることを読んだ。それでは、正しいことは何ですか?
(ls -RF | grep "/$"のようなものを試しましたが、これはディレクトリ名だけを提供しますが、システム上のすべてのファイル、ディレクトリなどへのフルパスが必要です。)
答え1
find の -exec オプションを使用します。サンプルスクリプトは次のように書かれています。
sudo find / -type d -exec myprog {} \;
{}は見つかったすべてのファイル(この場合はディレクトリ)に置き換えられます。
各エントリがディレクトリであるか通常のファイルであるか、または別のエントリであるかに応じて異なる操作を実行するには、そのロジックを "myprog.sh"に入れるか、別の種類の選択でfindを複数回呼び出すことができます。
編集:シングルインスタンススクリプトオプションの場合は、myprogを次のように作成します。
#! /bin/bash -
while IFS= read -rd '' FILE; do
if [ -d "$FILE" ]; then
...
done
そして電話してください
find / -print0 | myprog
(サポートしていない場合は交換してください-print0
。)-exec printf '%s\0' {} +
find
-print0
答え2
すべてのファイルを印刷するには
find / -type f