ディレクトリ内のすべてのファイルを再帰的に一覧表示しますが、ディレクトリ自体は除外します。

ディレクトリ内のすべてのファイルを再帰的に一覧表示しますが、ディレクトリ自体は除外します。

簡単な質問です。次の find コマンドを実行しています。

find . -type d \( -path ./.git -o   \
                  -path ./log -o    \
                  -path ./public -o \
                  -path ./tmp       \) \
                  -prune -o         \
                  -print

指定されたディレクトリを除いて、私のディレクトリ内のすべてのファイルを一覧表示します。

これはうまくいきますが、私がやりたいことは、出力から実際のディレクトリを除外することです。したがって、ディレクトリ構造が次のような場合:

test
  -- foo.text
  -- bar.text

私が見たいコマンドを実行したとき:

./test/foo.text
./test/bar.text

変える:

.
./test
./test/foo.text
./test/bar.text

誰でも助けることができますか?

答え1

find . -type f

そうするでしょう。ファイル名に対して操作を実行するには、execを実行できます。

答え2

ただ使用してください! -type d

find . -type d \( -path ./.git -o \
                  -path ./log -o \
                  -path ./public -o \
                  -path ./tmp \) -prune -o \
       ! -type d -print

答え3

これは一つの方法です。私は少しbashをfind使って出力をパイプし、xargs「ディレクトリではありませんか?」と尋ねます。それ以外の場合は端末に再表示されます。

彼女の全体の爆発は次のとおりです。

find . -type d \( -path ./.git -o -path ./log -o -path ./public -o -path ./tmp \) -prune -o -print | xargs -i bash -c 'if [ ! -d "{}" ]; then echo "{}"; fi'

これは私が追加したものです:

xargs -i bash -c 'if [ ! -d "{}" ]; then echo "{}"; fi'

説明する:

xargs -i「{}」文字列をパラメータ(パイプを介して渡されるパラメータ)に置き換えます。

bash -c文字列からコマンドを読む

if [ ! -d "{}"];これはディレクトリですか?

echo "{}"検索結果をエコーし​​ます。

fi;場合は終了します。

関連情報