私はbashスクリプトを使用していて、すべてのファイル(すべてのjarファイルと言います)のリストを取得したいと考えています。コマンドls -1 lib/*.jar
を実行して、出力を取得します。
lib/mylib_1.jar
lib/mylib_2.jar
...
次の出力を行うオプションはありますか?
mylib_1.jar
mylib_2.jar
...
前にcd lib
を作成することはオプションではありません。ループ内にあり、ループ内で実行するアクションの親フォルダーに存在する必要があるためです。
「man ls
」と入力して情報を検索しようとしましたが、解決策は見つかりませんでした。
別のコマンドを使用した解決策は、ls
コマンドまたはそれ自体で十分なものにパイプできる限り、良いでしょう。
GNU find
を使用すると、すべてのファイルに対してbasename
を実行する必要がありません。これは非常に高速になります(特にファイルが多い場合):
find lib -name '*.jar' -printf '%P\n'
(cd lib && echo *.jar)
、ファイル名に空白や特殊文字がないと仮定します。親スクリプトがディレクトリを変更することはありません。
ジョシュジョリーが彼の回答で述べたように、ls
を解析してはいけません。代わりに彼の回答でアプローチを使用してください。それでも、ファイル名からパスを削除するawk
ソリューションがあります。lsでは使用しないでください。
find . | awk -F'/' '{print $NF}'
-F'/'
は、フィールドセパレータを/
に設定します。これは、最後のフィールド$NF
がファイル名になることを意味します。