コマンドラインはディレクトリ内のすべてのファイル名を検索します。ないファイル名.sh
出力例:
$>./file.sh -e
答え1
find . -name \*.sh | sed 's/\.sh$//'
または
find . -name \*.sh -print0 | xargs -0 basename -a -s .sh "{}" \;
答え2
バッシュ使用:
shopt -s globstar
for f in **/*.sh; do printf '%s\n' "${f%*.sh}"; done
答え3
find . -type f -name '*.sh' \
-exec sh -c 'for n; do basename "$n" .sh; done' sh {} +
または、find
以下を知っている人と一緒に-execdir
:
find . -type f -name '*.sh' \
-execdir sh -c 'echo "${1%.sh}"' sh {} \;
(検出された各ファイルに対して一度呼び出されるので、少し効率が悪くなりますsh -c
。)
つまり、現在のディレクトリですべての名前を探します.sh
。これらの名前(パスを含む)はサブシェルに渡され、サブシェルは見つかった名前を繰り返して各名前をbasename
呼び出してパスと名前拡張子を削除します。
フルパスでデフォルト名を調べて「フィルタ」と呼ぶか、指定されたファイル名の名前のサフィックスを持つファイルではなくディレクトリを除外しない限り、実際には何もフィルタリングしないため、「フィルタ」と呼ばれません。 。
フィルタは通常、一方の端からデータを読み取り、それを変換し、もう一方の端から何かをエクスポートします(他の変換に入力することもできます)。