BETA

lsでディレクトリと拡張子を指定して、ファイル名だけの一覧を取得する

投稿日:2019-01-27
最終更新:2019-02-27

したかったこと

./  
+ A/  
   + hoge.txt  
   + piyo.txt  
   + fuga.bin

カレントディレクトリでlsを実行し、A以下のディレクトリの*.txtを一覧にする
その際にファイルパス全部ではなく、ファイル名だけほしい

答え

basename -a A/*.txt

grep使う方法なら

ls A | grep '.txt$'

だめだった方法

ls A/*.txt

実行結果

A/hoge.txt  
A/piyo.txt

ファイルパスがついてしまう(こっちのが使うときは多そう)

勘違いしてた方法

ls A *.txt
これは ls を Aディレクトリと *.txtディレクトリ に対して実行している意味になるのでぜんぜん違う。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

論文紹介、知った技術、競技プログラミング参戦記書いていきます

よく一緒に読まれる記事

2件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
01/27 20:51

grep に与えるのは正規表現なので、その辺考慮してやらないと期待通りの結果にならないと思います。

$ ls A
atxt.a foo.txt.gz fuga.bin hoge.txt piyo.txt

$ ls A | grep '.txt'
atxt.a
foo.txt.gz
hoge.txt
piyo.txt

$ ls A | grep '.txt'
foo.txt.gz
hoge.txt
piyo.txt

$ ls A | grep '.txt$'
hoge.txt
piyo.txt

今回のような場合、basenameコマンドが使えるのではないでしょうか

$ basename -a A/*.txt
hoge.txt
piyo.txt

02/27 13:04

@bogo さん

ご指摘ありがとうございます!今まで雰囲気で使ってたのでわかってませんでした。

grepの引数は正規表現だったんですね。 あとbasenameも気づいていませんでした。 本文修正します。

目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!