システム上のすべてのファイル名を一覧表示する方法[閉じる]

システム上のすべてのファイル名を一覧表示する方法[閉じる]

システム内のすべてのファイルをスキャンしたいと思います。これを行うには、システム上のすべてのファイルへのフルパスが必要です。私の初期のアイデアは、次のようにすることでした。

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

関連情報