
という名前のファイルを含むフォルダーとサブフォルダーが多数あります。1. Introduction--- [ FreeCourseWeb.com ] ---.mp4
すべてのファイル (フォルダーとサブフォルダー) の名前を再帰的に変更して、1. Introduction.mp4
サブ文字列を抑制したいと考えています--- [ FreeCourseWeb.com ] ---
。
答え1
名前の先頭に数字があり、部分文字列が---
2 回含まれ、その直後に名前の最後にあるすべてのファイルの名前を変更するとします。さらに、これらの部分文字列自体を含む.mp4
2 つの部分文字列間のビットを削除するとします。---
find . -type f -name '[[:digit:]]*---*---.mp4' -exec sh -c '
for pathname do
mv -i "$pathname" "${pathname%---*---.mp4}.mp4"
done' sh {} +
これは、現在のディレクトリ内またはその下にある、指定されたパターンに一致する名前を持つすべての通常ファイルを検索し、一致するサフィックス文字列を削除して---*---.mp4
、.mp4
サフィックスを再度追加します。
使用しない場合find
(bash
):
shopt -s globstar nullglob dotglob
for pathname in ./**/[[:digit:]]*---*---.mp4; do
[[ ! -f $pathname ]] && continue
mv -i "$pathname" "${pathname%---*---.mp4}.mp4"
done
これは基本的に コマンドと同じですfind
が、シンボリック リンクの名前も変更します。 最初に設定される 3 つのシェル オプションは、**
サブディレクトリまで再帰的に一致させるために使用されるグロビング パターンを有効にし ( globstar
)、一致しないパターンを展開せずに削除し ( nullglob
)、グロビング パターンが非表示の名前と一致するようにします ( dotglob
)。
シェル内zsh
:
for pathname in ./**/[[:digit:]]*---*---.mp4(.ND); do
mv -i $pathname ${pathname%---*---.mp4}.mp4
done
ここで、 glob 修飾子のドットにより、(.ND)
先行するパターンは通常のファイルのみに一致しますが、 とは のと を有効にするのN
とD
同じように動作しますが、この特定のパターンに対してのみ動作します。nullglob
dotglob
bash
答え2
rename
パッケージのツールutil-linux
( と呼ばれることもありますrename.ul
) とを使用しますfind
。
find . -type f -name '*--- \[ FreeCourseWeb.com \] ---.mp4'\
-exec rename -i -- '--- [ FreeCourseWeb.com ] ---' '' {} \;
オプションは-i
、既存のファイルを上書きする許可を求めます。
Larry Wall の Perlrename
スクリプトとを使用しますfind
。
find . -type f -name '*--- \[ FreeCourseWeb.com \] ---.mp4'\
-exec rename 's/--- \[ FreeCourseWeb.com \] ---//' {} \;
-f
/オプションが使用されない限り、既存のファイルはデフォルトでは上書きされません--force
。代わりにエラー メッセージが表示されます... already exists
。