1

私はbashスクリプトを書いていて、LSを使用してパス/ * .tarを指定し、フルパスとファイル名の代わりにファイル名だけを返して、ファイル名を読み取りから配列に渡したいと考えています。ターミナル:

ディレクトリで LS を使用すると、次のように返されます。

admin@linuxbox:~$ ls  /home/admin/Backup/
0_BuIndex.txt.backup  Backup1376238064.tar  Backup1376239611.tar  Backup1376241919.tar
Backup1376167035.tar  Backup1376238960.tar  Backup1376240158.tar  Backup1376243097.tar
Backup1376168581.tar  Backup1376239110.tar  Backup1376241421.tar
Backup1376237070.tar  Backup1376239350.tar  Backup1376241489.tar
Backup1376237928.tar  Backup1376239479.tar  Backup1376241608.tar

パスとファイルの種類を指定すると、次が返されます。

admin@linuxbox:~$ ls  /home/admin/Backup/*.tar
/home/admin/Backup/Backup1376167035.tar  /home/admin/Backup/Backup1376239479.tar
/home/admin/Backup/Backup1376168581.tar  /home/admin/Backup/Backup1376239611.tar
/home/admin/Backup/Backup1376237070.tar  /home/admin/Backup/Backup1376240158.tar
/home/admin/Backup/Backup1376237928.tar  /home/admin/Backup/Backup1376241421.tar
/home/admin/Backup/Backup1376238064.tar  /home/admin/Backup/Backup1376241489.tar
/home/admin/Backup/Backup1376238960.tar  /home/admin/Backup/Backup1376241608.tar
/home/admin/Backup/Backup1376239110.tar  /home/admin/Backup/Backup1376241919.tar
/home/admin/Backup/Backup1376239350.tar  /home/admin/Backup/Backup1376243097.tar

2番目のようなコマンドを使用したいのですが、パスなしでファイル名のみを返すようにします。現在の私の回避策は使用することです

read -r -a TarArray <<< `ls -1 /home/admin/Backup | grep "tar"`

しかし、grepを介してパイプする必要のない解決策を見つけたいと思っています。

何か案は?皆さんありがとう!

4

4 に答える 4

3

これに潜在的に使用できますfind

find /home/admin/Backup -name \*.tar -printf '%f\n'

マニュアルページから:

-printf format
    True;  print  format  on  the standard output,
    interpreting `\' escapes and `%' directives.
    ...
    %f     File's name with any leading directories
           removed (only the last element).
于 2013-08-11T20:09:06.047 に答える
2

したがって、答えはすでに選択されていることは知っていlsますが、興味がある場合に備えて、使用するオプションを次に示します。

ls /home/admin/Backup/*.tar | awk -F/ '{print $NF}'
于 2013-08-11T22:12:56.727 に答える