簡単な質問です。次の検索コマンドを実行しています。
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
誰か助けてもらえますか?
find . -type f
それを行います。ファイル名を操作したい場合は、execを実行できます。
! -type d
:
find . -type d \( -path ./.git -o \
-path ./log -o \
-path ./public -o \
-path ./tmp \) -Prune -o \
! -type d -print
これを行う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;
終了する場合。