0

私はちょうどWindows8から来て、今大きな問題を抱えています。私は現在Ubuntu12.10を使用しており、FileHistoryを使用してデータを外付けハードドライブにバックアップしました。これで、ファイル名にタイムスタンプを追加することに加えて、すべてのファイルがバックアップされました。

「(2012_」で始まり「)」で終わる括弧の間のすべてを削除する必要があります。

誰かがこれを手伝ってくれますか?これが私が修正しようとしているファイルのリストのスクリーンショットです:

https://dl.dropbox.com/u/2526790/Screenshot%20from%202012-11-30%2021%3A19%3A06.png

どんな助けでも大歓迎です。

ありがとう、

4

3 に答える 3

0

あなたはこのようにそれを行うことができます:

for FILE in *; do
    mv "$FILE" "${FILE%(*}${FILE##*)}"
done

これが機能するのは、右から${FILE%(*}最小の一致(*、つまり最後の開き括弧を含むすべてを削除し、左から${FILE##*)}最大の一致、つまり最後の閉じ括弧を含むすべてを削除するためです。*)それらを組み合わせると、最後の括弧以外のすべてを取得する必要があります。これは、ファイル名のいずれかに他の括弧が含まれている場合でも機能するはずです。

この種のスクリプト移動は注意が必要であり、ファイル名を台無しにする可能性があることに注意してください。echo上記の代わりに使用mvして、最初にすべてのファイルに対して本当に正しいことを確認することをお勧めします。

また、ファイル名にスペースが含まれているため、二重引用符も重要です。

開き括弧の前の最後のスペースも削除する場合は、最初のパターンに含めます${FILE% (*}

于 2012-12-01T04:01:17.863 に答える
0

一方通行:

現在のファイル:

$ ls -l
total 0
-rw-r--r-- 1 guru None 0 Dec  1 09:14 a (2002).iso
-rw-r--r-- 1 guru None 0 Dec  1 09:14 b_(2003_2).iso

ファイルの名前を変更します。

$ (
> IFS=""
> for i in *
> do
>  mv "$i" $(echo $i | sed 's/\(.*\)(.*)\(.*\)/\1\2/')
> done
> )

上記のコマンドを実行した後:

$ ls -l
total 0
-rw-r--r-- 1 guru None 0 Dec  1 09:14 a .iso
-rw-r--r-- 1 guru None 0 Dec  1 09:14 b_.iso
于 2012-12-01T03:46:25.610 に答える
0

これはどう?

rename 's/\s\([^\)]+\)//' *.*

ラリー・ウォールに感謝します。

于 2012-12-02T15:40:41.697 に答える