ファイル名を含むフォルダとサブフォルダがたくさんあり、部分文字列のみを抑制する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