私は名前の変更に精通していますが、重複した拡張機能を削除するために名前の変更が引き続き適用されることに興味がありました??
次の名前のファイルがいくつかあるとします。
- 写真2.jpg.jpg
- 写真9.jpg.jpg
- 写真3.jpg.jpg
- 写真6.jpg.jpg
重複した拡張子をどのように削除しますか??
最終結果:
- 写真2.jpg
- 写真9.jpg
- 写真3.jpg
- 写真6.jpg
仮定:
.jpg.jpg
ます。次に、次のスクリプトが機能します。
#!/bin/bash
for file in *.jpg.jpg
do
mv "${file}" "${file%.jpg}"
done
説明:
${file%.jpg}
:この部分はパラメータ置換と呼ばれます。このスクリプトを使用するには:
clean_de.sh
そのディレクトリに呼び出される新しいファイルを作成しますchmod +x clean_de.sh
./clean_de.sh
警告の注記:
@gniourf_gniourfが指摘しているように、サポートしている-n
場合はこのオプションを使用してください。mv
それ以外の場合-同じディレクトリにある場合は、名前が変更a.jpg
され、プロセス中に警告なしに既存のディレクトリが上書きされます。a.jpg.jpg
a.jpg.jpg
a.jpg
a.jpg
1行の名前変更コマンドでも十分です(少なくともあなたの場合):
rename 's/\.jpg\.jpg$/.jpg/' *.jpg.jpg
これは、より一般的ですが、この問題に対する簡単な解決策です。
for oldName in `find . -name "*.*.*"`; do newName=`echo $oldName | rev | cut -f2- -d'.' | rev`; mv $oldName $newName; done
簡単な説明:
find . -name "*.*.*
- これにより、拡張子が重複するファイルのみが再帰的に検索されます
echo $oldName | rev | cut -f2- -d'.' | rev
- ここでトリックが発生します。rev コマンドは文字列を逆に処理するため、最初のドットからファイル名全体が必要であることがわかります。(gpj.gpj.fdsa)
mv $oldName $newName
- 実際にファイルの名前を変更する
リリース ノート: 1 行の単純なスクリプトであるため、未処理のケースを見つけることができます。ファイル名に余分なドットがあるファイル、非常に深いディレクトリ構造など。