こんにちは!バイオインフォマティクス系オタク修士学生の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
に移動してカレントディレクトリの編集前のファイルを削除後, 編集後のファイルをカレントディレクトリに戻して名前を元のファイル名に変えるというものです.
本当はもっとよい方法があるのだと思いますがもしよければご参考までに...