~/mydir/
多くのファイルを含むディレクトリがあります。これらのファイルの一部は
~/mydir/foo.py
~/mydir/foo.tex
~/mydir/foo.pdf
~/mydir/foo.log
~/mydir/
デフォルト名のファイルfoo
をfoo-bar
。
~/mydir/foo-bar.py
~/mydir/foo-bar.tex
~/mydir/foo-bar.pdf
~/mydir/foo-bar.log
新しいファイル名が既存のファイルと競合することを心配しません($ ls ~/mydir/foo-bar*
何も返されません)。
Bashではこれを行うのは簡単ですが、わかりません。
これを行う簡単なスクリプトはありますか?
答え1
ディストリビューションがperlバージョンの名前変更を使用(または提供)する場合(Debianおよびほとんどの派生バージョンがこれを実行します):
cd mydir
rename 's/\.([^.]+)$/-bar.$1/
私はいくつかのディストリビューション(どんなディストリビューションも覚えていません)をprename
。
答え2
これは次の方法で行うことができますmv
。
for name in ./foo*; do mv "$name" "${name/foo/foo-bar}"; done
たとえば、
[devuser@machine test]$ touch foo.log foo.pdf foo.tex foo.py
[devuser@machine test]$ ls
foo.log foo.pdf foo.py foo.tex
[devuser@machine test]$ for name in ./foo*; do mv "$name" "${name/foo/foo-bar}"; done
[devuser@machine test]$ ls
foo-bar.log foo-bar.pdf foo-bar.py foo-bar.tex