Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2833

rmで正規表現で指定したファイル「以外」を消したい!

$
0
0

こんにちは!バイオインフォマティクス系オタク修士学生のroadricefieldです!

シェル芸のタグを付けましたが, 慣れておられる方々はもっとエレガントな方法でやるはずです...

やりたいこと

以下のようなファイルがカレントディレクトリにあるとします.

Aqours_Takami.txt
Aqours_Sakurauchi.txt
Aqours_Watanabe.txt
aaa.txt
bbb.txt
ccc.txt

この内Aqours*以外のファイルを消したいとします. なんかrmにそういったオプションが無いようなのでこうしました.

mkdir tmp

mv Aqours* tmp

rm*mv tmp/Aqours* ./

rm-r tmp

はい!tmpというディレクトリにAqours*を一時退避させてカレントディレクトリを一掃してからAqours*を戻してtmpを消しただけです(笑).

ちょっと応用

ディレクトリ内のファイルに対して一斉に同じ処理を行って同じ名前で保存することを考えます. Bashって下のようなことをするとファイルが空になってしまいますよね...?

sed-e'1d' aaa.txt > aaa.txt #aaa.txtの一行目を削除

だからこんな感じで書いてみました.

#!/bin/bashfiles=`find *.txt`mkdir tmp

for f in${files};do
    sed-e'1d'${f}> mod_${f}mv mod_${f} tmp
    rm${f}mv tmp/mod_${f} ./
    mv mod_${f}${f}done

rm-r tmp

編集後のファイル名は頭にmod_を付けてtmpに移動してカレントディレクトリの編集前のファイルを削除後, 編集後のファイルをカレントディレクトリに戻して名前を元のファイル名に変えるというものです.

本当はもっとよい方法があるのだと思いますがもしよければご参考までに...


Viewing all articles
Browse latest Browse all 2833

Latest Images

Trending Articles