web-dev-qa-db-ja.com

cshまたはbashを使用してMacでファイル拡張子をバッチ削除する方法は?

Macのすべてのファイルに誤って.dcm拡張子を追加したため、iCloudとキーチェーンのストレージにログインできませんでした。

元のファイル拡張子を復元するための解決策を見つけるのに必死でしたが、.abc.def拡張子に置き換える答えしか見つかりませんでした。これは私が望んでいないことです。すべてのファイルに追加された冗長な.dcm拡張子をすべて削除したいと思います。

すべてのファイルの.dcm拡張子を(再帰的に)削除する方法はありますか?

これらは私が見つけたファイル拡張子を置き換えるための解決策です:

for file in *.abc; do mv "$file" "${file%.abc}"; done
for old in *.abc; do mv $old basename $old .abc.ef; done

それらは再帰的ではないか、Bash(3.2x)が「不正な置換」/「コマンドが見つかりません」と言っています。

3
Yaqian Huang

これはそれを行う必要があります:

find / -type f -name '*.dcm' -exec sh -c 'mv -- "$0" "${0%.dcm}"' {} \;

コマンド:

  • /から再帰
  • *.dcmという名前のすべてのファイルを検索します
  • ファイル名({})という1つの引数を使用して小さなサブシェル呼び出しを実行します
  • mvを使用してファイル($0)の名前を変更します
  • 文字列操作を使用して%の最短一致(.dcm を削除

echoの前にmvを置いて、それが何をするかを確認します。

サブシェルなしで作業したい場合は、whileにパイプできます。

find / -type f -name '*.dcm' -print0 | while IFS= read -r -d '' filename; do
  mv -- "$filename" "${filename%.dcm}"
done
4
slhck