次のファイルをどのようにリストしますか?x、y、z次に終わらないサブディレクトリからx、y、z?
ベストアンサー1
ドロップを完全に防ぎ、深さが*[xyz]
2の通常のファイル(find a/x
、nor ax/x
nor、2つのディレクトリを超えない)の場合は、a/b
POSIXly:x
a/b/x
LC_ALL=C find . \( ! -name '*[xyz]' -o -prune \) \
-path './*/*' -prune -type f -name '*[xyz]'
これは次のとおりです。
printf '%s\n' *[!xzy]/*[xyz]
とりわけ、隠しディレクトリと隠しファイルを探し、ディレクトリへのシンボリックリンクは見つからず、通常のファイルのみを探します。
*[xyz]
任意の深さの一般的なファイルを探したい場合直接親ディレクトリはGNUで終わりませんxyz
(したがってx
、、a/x
はa/b/x
見つかりますがnorはx/b/x
見つかりません)。x/x
a/x/x
find
LC_ALL=C find . -regex '.*[^xyz]/[^/]*[xyz]' -type f
そしてzsh
:
setopt extended_glob
printf '%s\n' **/*[xzy]~*[xyz]/[^/]#(D.)
POSIX的に:
LC_ALL=C find . -name '*[xzy]' -type f -exec sh -c '
for f do
case ${f%/*} in
*[xzy]) ;;
*) printf '%s\n' "$f"
esac
done' sh {} +
サブディレクトリでも内部をまったく見たくない場合*[xyz]
(つまり、見たくない場合x/a/x
) 次のようになります。
find . -name '*[xyz]' -prune -type f
-prune
find
ディレクトリに入らないように指示し、trueを返します。
または以下を使用してzsh
:
setopt extended_glob
printf '%s\n' (*[^xyz]/)#*[xyz](D.)