フォルダ内の複数のファイルのファイル名を切り捨てる方法

フォルダ内の複数のファイルのファイル名を切り捨てる方法

複数のpng画像ファイルを含むフォルダがあります。末尾から一部の情報を削除するには、ファイル名を切り捨てる必要があります。

例えば

some file-170227-222746.png
some other file-170228-222742.png
another file-170226-222743.png

.png 拡張子を維持しながら - 以降のすべての項目を削除し、次のように仕上げる必要があります。

some file.png
some other file.png
another file.png

すべてのファイルはpng画像ファイルなので、元のファイルを保存する必要はありません。

私はこれを試してみましたが、うまくいきましたが、.png拡張子を削除して間違ったことをしました。

for file in *.png; do
  mv -- "$file" "$(file%%.png"
done

上記のmvコマンドを変更して必要な操作を実行できますか?別のアプローチを使用する必要がありますか?

ありがとう

答え1

あなたのアプローチは正しい方向に進んでおり、いくつかの正確さが必要です。次のことができます。

for file in ./*.png; do  mv  "$file"  "${file%%-*}.png";  done

答え2

Perlスクリプトにアクセスできる場合は、rename次のものも使用できます。

rename -n 's/(.*).{14}(\.png)/$1$2/' *

削除をテストしたら、-n実際にファイルの名前を変更してください。

ノート

  • -n実際に何もせずに変更される内容を印刷します。
  • s/old/newold使用。 。 。交換new
  • (.*)後で使用できるように、この場所のすべての文字を保存してください。
  • .{14}正確に14文字
  • (\.png)救う.png
  • $1$2最初の保存パターンと2番目の保存パターンを印刷します。

答え3

みんなの助けに感謝します。

私の最善の解決策は次のとおりです。

for file in ./*.png; do  
mv  "$file"  "${file%%-17*}.png";  done

注-17。これにより、ファイルにトリミングする必要がある領域の前に初期ダッシュがあるときに切り捨てられる問題を回避できます。

例えば

some file-name-170227-222746.png

次のように整理されます。

some file-name.png

変える:

some file.png

関連情報