ディレクトリにbashスクリプトがあります./
。このディレクトリには次のファイルが含まれていますoutput
。output
Alabama.txt
U.S. Virgin Islands.txt
ファイルを繰り返してoutput
次の出力を印刷する方法
Alabama
U.S. Virgin Islands
ベストアンサー1
for pathname in output/*.txt; do
basename "$pathname" .txt
done
このbasename
ユーティリティはパス名を取得し、すべてのディレクトリ部分を削除し、最終ファイル名部分のみを残します。また、オプションの2番目の引数として文字列を受け入れます。文字列は、指定されたパス名の末尾で切り捨てられます。
パス名の一部を削除し、ファイル名のサフィックスを削除するには、basename
すべての名前の一致にループを使用します。これにより、出力ファイル名の「ステム」のみが残ります。output/*.txt
output/
.txt
組み込みの標準パラメータ置換を使用して同じ効果を得ることができます。
for pathname in output/*.txt; do
name=${pathname#output/}
printf '%s\n' "${name%.txt}"
done
これは、拡張された各パス名に対して2つのパラメータ置換を実行しますoutput/*.txt
。 1 つは最初の部分output/
文字列を削除し、2 番目は末尾の部分.txt
文字列を削除します。
output
ディレクトリにファイル名サフィックスが含まれているファイルがない危険性がある場合は、シェルオプションを.txt
設定できます(使用)。これにより、上記のループが一度だけ実行されるのを防ぐことができます(非拡張モードを使用)。nullglob
shopt -s nullglob
output/*.txt
$pathname
dotglob
ディレクトリの隠し名前を一致させるには、シェルオプションを設定する必要があるかもしれません。