フォルダ内の一部のファイルを見たいのですが、サブディレクトリは見たくありません。
ディレクトリを除外したくないけどみんな!
私はこれを試しました~から
find "$dir" -name '*.out' -type d -prune
しかし、結果は何も出てこないということです。助けが必要ですか?
答え1
タスク(すべてのサブディレクトリを除くフォルダ内のファイルを検索)を実行する最も簡単な方法は次のとおりです。
find $dir -maxdepth 1 -type f -name '*.out' -o '.*.out'
@StevenPennyと@RalfFriedlalが書いたように、maxlengthオプションはあなたが探しているものです。
検索マニュアルでは、-maxの深さレベルは、始点より下のほとんどの(非負の整数)ディレクトリレベルに下がります。 -maxlength 0 は、始点自体にのみテストと操作を適用することを意味します。
-type f
:一般ファイルを検索しています
-name '*.out' -o '.*.out'
。 -oは、または検索に.out拡張子を持つ最終的な隠しファイルを含めることができることを意味します。
申し訳ありません。私の英語力が悪いです。
答え2
マニュアルを見てみましたか?
-maxdepth
@StevenPennyがすでに書いたように、あなたが探しているオプションはです。
何も得られない理由の一つは(説明書から)
フル式に-pruneまたは-print以外の操作が含まれていない場合、式全体がtrueのすべてのファイルに対して-printが実行されます。
したがって、あなたの選択が含まれているので、-prune
何も暗示されません-print
。あなたのコマンドは名前付きディレクトリのみを削除します*.out
。
本当に使いたい場合は、-prune
次のようにします。
find "$dir"/* -type d -prune -o -name '*.out' -print
これはディレクトリ"$dir"/*
として使用され、クリーン"$dir"
アップされます。これはfind
、最大パラメータ長によって制限されないという利点を無効にします。
答え3
find
ここでは実際にこれがまったく必要ないようです。
for pathname in "$dir"/*.out; do
[ ! -f "$pathname" ] && continue
# do whatever you need to do to "$pathname" here
done
テスト後、-f
一般"$pathname"
ファイルまたは一般ファイルへのシンボリックリンクをポイントします。*
ドットで始まるファイル名と一致する項目がないため、隠しファイルはスキップされます(使用可能または使用しない可能性があるdotglob
シェルオプションがに設定されていない場合)。bash
そしてfind
:
find "$dir" -mindepth 1 -type d -prune -o -type f -name '*.out' -print
これ-mindepth 1
は起動ディレクトリをクリーンアップしません-type d -prune
。-print
は、見つかったパス名に対して実行したい操作に置き換える必要があります(これは名前で終わる一般的なファイルです.out
)。
または、
find "$dir" ! -path "$dir" -type d -prune -o -type f -name '*.out' -print
これは標準find
オプションのみを使用し、開始パスと他のすべてのディレクトリをクリーンアップします。
または、
find "$dir" -maxdepth 1 -type f -name '*.out' -print
-maxdepth 1
find
簡単に言えば、使用はスタートアップディレクトリのサブディレクトリに降りるのをやめます。
-mindepth
とオプションは-maxdepth
通常利用可能ですが、標準find
コマンド、実装にfind
これらの項目がない場合は、シェルループまたは(with)のみをfind
使用する代替を使用する必要があります。-prune
-path
答え4
そしてzsh
:
printf '%s\n' $dir/*.out(^/) # files of any type except directory (excluding
# hidden ones)
printf '%s\n' $dir/*.out(-^/) # same but also excludes symlinks to directories
printf '%s\n' $dir/*.out(.) # regular files only (excluding hidden ones)
printf '%s\n' $dir/*.out(-.) # regular files or symlinks to regular files
# (excluding hidden ones)
printf '%s\n' $dir/*.out(D-.) # same, but include hidden ones.