フォルダ内のファイルの名前を一括変更


10

フォルダ内のファイル名から一部のテキストを削除するにはどうすればよいですか?

私は現在試みています:

rename s/"NEWER_(.*?)"//g *

しかし、名前が変更されることはありません

私は親フォルダーがあり、サブフォルダーがたくさんあり、ファイル内にOneDriveが "(NEWER_timestamp)"を追加するのは良い考えだと思いました。それを削除したいと思います。

ファイル名の例:

getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)

2
ファイル名の例を投稿できますか?
muru 14

承知しました。いくつかの質問を更新
Kevin

回答:


8

以下を試してください:

find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$:$1:' {} +

./o7th.ico (NEWER_1417529135.81)                                 renamed as /o7th.ico
./sub-dir (NEWER_1417529135.81)/getyou.ico (NEWER_1417529079.87) renamed as /sub-dir (NEWER_1417529135.81)/getyou.ico
./sub-dir (NEWER_1417529135.81)/o7pm.ico (NEWER_1417529184.89)   renamed as /sub-dir (NEWER_1417529135.81)/o7pm.ico
./getyou.ico (NEWER_1417529079.87)                               renamed as /getyou.ico
./o7pm.ico (NEWER_1417529184.89)                                 renamed as /o7pm.ico
  • すべて[^/]*(.*) .*$は、を含まないパスの最後の部分にのみ一致します/。そして
  • 上記の正規表現で(.*)は、最後/からスペースの前までのすべてに一致するグループです。その後方参照はになります$1
  • .*$$スペースの後のファイル名の終わりにすべてを一致させます。
  • 最後にrenameの置換部分でs/.../REPLACEMENT/、last \と一致グループ(.*)と呼ばれるスペースの間にある一致グループを保持しました。

2

正規表現の外で引用符を使用することを検討し(文字列は文字通り引用符として扱われます)、エスケープし(ます。試してください。

rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*

式の精度は必ずしも必要ではないかもしれませんが、ファイルを変更するときは注意が必要です。


このすべてをやっているとぶら下がっているreading filenames from STDIN私はすべてのこれらのファイルがある親フォルダ内にすでに午前
ケビン・

@Kevin "コマンドラインでファイル名が指定されていない場合、ファイル名は標準入力を介して読み取られます。" また、*NEWER*展開が見つからない場合、シェルはそのままになるため、ミスをしたか、一致しないワイルドカードを何も置換しないシェルを使用しているはずです。
muru 14

Ubuntu 14.10シェルにコピーアンドペースト
Kevin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.