ディレクトリ内の各ファイルからファイル名の一部を削除するBashスクリプト

ディレクトリ内の各ファイルからファイル名の一部を削除するBashスクリプト

ディレクトリに名前が 。形式のファイルが複数あります*.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

おすすめ記事