"ls"コマンドからフォルダプレフィックスを削除できますか?

"ls"コマンドからフォルダプレフィックスを削除できますか?

私は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他のコマンドを使用するソリューションは、私のコマンドにパイプすることも自給自足できるものであれば大丈夫です。

答え1

変えるlsを解析するを使用する必要がありますfind。その後、basename各ファイルに対して次の操作を実行して先行ディレクトリを削除することもできます。

find lib/ -name '*.jar' -exec basename {} \;

答え2

GNUを使用すると、すべてのファイルを実行するfind必要はなく、basenameはるかに高速です(特にファイルが多い場合)。

find lib -name '*.jar' -printf '%P\n'

答え3

(cd lib && echo *.jar)ファイル名にスペースや特殊文字が含まれていないとします。親スクリプトはディレクトリを変更しません。

答え4

find行く方法かもしれませんが、もし本当にlib/(あなたは)から削除したくありません。ls -1以下を使用できます。sed

$ ls -1 lib/*.jar | sed 's#^lib/##'
mylib_1.jar
mylib_2.jar

関連情報