7

ディレクトリ()内の多くのファイルに/root/path/は、奇妙な文字列が追加されています(\#015)。奇妙な文字列のない通常の名前に置き換えるのを手伝ってください。

私は欲しい:

/root/path/img1.png\#015
/root/path/img2.jpg
/root/path/img3.png\#015

することが:

/root/path/img1.png
/root/path/img2.jpg
/root/path/img3.png

手伝ってくれますか?

4

4 に答える 4

5
for file in *\#015
do
   mv -- "$file" "${file%\#015}"
done

「\」をエスケープする必要がある場合があります。最初にtmpディレクトリで試してください。

于 2012-11-16T16:55:01.173 に答える
5

インストールしている場合rename、これはかなり単純なタスクになります。

rename 's/\\#015$//' /root/path/*\\#015

必要に応じて、フラグを追加して-f既存のファイルを強制的に上書きできます。

于 2012-11-16T23:02:20.433 に答える
1

これは私が過去に小さなシェルで同様の問題を解決した方法です。

cd /root/path/
ls | grep '\#015' | sed 's/\(.*\)\\#015/mv & \1/' | sh
于 2012-11-16T16:36:17.487 に答える
0

find次のように、パラメータ置換を使用してこれを行うことができます。

#!/bin/bash

find -name '*\\#015' | while IFS= read -r f
do
    mv -- "${f}" "${f%?????}"
done
  • 上記のコードをで呼び出されたスクリプトに入れmy_script.sh/root/path/chmod +x my_script.sh && ./my_script.sh
  • これにより、下のすべてのサブフォルダーにも再帰的に変更が適用されることに注意してください/root/path/

説明:

  • find -name '*\\#015':で終わるすべてのファイルを検索\#015
  • 次に、見つかったそのようなファイルごとmv "${f}" "${f%?????}"に、ファイル名の名前を古い名前から新しい名前に変更し、ファイル名の最後の5文字を​​削除します。
于 2012-11-16T16:52:31.387 に答える