簡単な質問です。次の 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;
場合は終了します。