web-dev-qa-db-ja.com

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

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

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

誰か助けてもらえますか?

8
TheDelChop
find . -type f

それを行います。ファイル名を操作したい場合は、execを実行できます。

10
unxnut

! -type d

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

これを行う1つの方法を次に示します。私はfindからの出力(xargsを使用)を「ディレクトリではありませんか?」という質問をするbashの少しにパイプしています。そうでない場合は、端末にエコーします。

これがシバン全体です:

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;終了する場合。

0
dougBTV