ディレクトリに名前が 。形式のファイルが複数あります*.foo.bar
。部分を削除して各ファイルの名前を変更するbashスクリプトを作成したいと思います.foo
。
たとえば、tree ~/dir/
返品を考えてみましょう。
/home/user/dir/
|- george.foo.bar
|- john.foo.bar
|- paul.foo.bar
|- ringo.foo.bar
|- subdir
|- jimmy.foo.bar
|- robert.foo
その後、実行するとscript ~/foo/
内容が~/foo
次に変わります。
/home/user/dir/
|- george.bar
|- john.bar
|- paul.bar
|- ringo.bar
|- subdir
|- jimmy.bar
|- robert.foo
ベストアンサー1
パラメータ拡張メカニズムを使用できます。
shopt -s globstar
for file in **/*foo.bar; do
prefix="${file%.foo*}"
suffix="${file##*.foo}"
mv -v -- "$file" "$prefix$suffix"
done
一致するサフィックスを削除し${file%.foo*}
(プレフィックスのみを残し)、${file#*.foo}
プレフィックスを削除します(サフィックスのみを残す)。すべてのサブディレクトリを巡回してglobを許可するには、**
二重星glob()が必要です。setopt -s globstar