Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

zshのfor文は強かった

More than 3 years have passed since last update.

zsh超初心者につき備忘録程度の内容。

for文ワンライナー

例えば、

for f (1.txt 2.txt) rm $f

ってやれば1.txtと2.txtを削除してくれる。

for f (*.txt) {echo $f; cat $f}

ってやれば同一階層内のtxtのファイル名と中身を一気に出力してくれる。

for f (**/*) echo $f

ってやれば同一階層内かそれより深いファイル全てのファイル名を表示してくれる。

ファイル名変数

以上3つのfor文はすべて$fにファイル名が代入されている。
本当に便利なのはここから。

for f (*.tx) mv $f $f:r.txt

こうすると、同一階層の◯◯.txが全て◯◯.txtにリネームされる。

変数オプション

上記スクリプトの場合を例にとると、$fの後に:rをつけることでファイル名の名前部分(拡張子以外)が取得できる。
試してみたところ以下のオプションが確認できた。
※カレントディレクトリは/root/pwd、対象ファイルは/root/pwd/directory/File 1.extとします。

オプション 内容 結果
$f(なし) 現在のディレクトリからのパス directory/File 1.ext
$f:a ルートからのフルパス /root/pwd/directory/File 1.ext
$f:e 拡張子 ext
$f:h $fを含むディレクトリ名(ユニーク) directory
$f:l 小文字に置換 directory/file 1.ext
$f:q エスケープ表現 directory/File\ 1.ext
$f:r ファイル名(拡張子を除く) directory/File 1
$f:t ファイル名(ディレクトリを除く) File 1.ext
$f:u 大文字に置換 DIRECTORY/FILE 1.EXT

これらのオプションは複合させることもできる。
例えば、$f:t:uとするとFILE 1.EXTが得られる。

ryoto20707
今はただのシェル芸人
https://ryotosaito.com/blog
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away