2012-03-16 12 views
1

ではありません。、bashのMVは、私がこれ持っているディレクトリ

$ ls a 
0 1 1_ 2 2_ 3 3_ 4 4_ 5 5_ 6 6_ 7 7_ 8 8_ 9 9_ a a_ b b_ c c_ 
d d_ e e_ f f_ 

を、そしてXへX_を移動したい、私はこれをしようとしている:

find a/*_ -type f -exec sh -c 'mv echo "$1" echo "$1" | sed \'\$s/.$//'' sh {} \; 

私は取得していますどのようなものです:

mv: target `a/x_' is not a directory 

答えて

1

より良い利用prename;)

prename 's/.$//' a/*_ 

あなたのディストリビューションに依存し、ときどきリネームするだけです。 file $(readlink -f $(type -p rename))

+0

魅力的な作品です! –

1
私が使用するように誘惑されると思います

(cd a; for file in *_; do mv "$file" "${file%_}"; done) 
0
for f in {1..9}; do test -e $f_ && mv ${f}_ $f ; done 
for f in {a..d}; do test -e $f_ && mv ${f}_ $f ; done 

テストを行うことができ、より細かい時には、あなたはこのようなことをテストすることができ、そこにELF形式の一つがですが、perlのいずれかが必要です何のディレクトリ$ F、上記のコマンドWOUがない場合

for f in {1..9} {a..d} 
do 
    test -f $f_ && test -d $f && mv ${f}_ $f 
done 

:その$ fが存在し、ディレクトリで、$ F_がtest -f $f_によってファイルであるかどうかを確認するために、そして私が保証するためのテストを提供することができldは$ f_を$ fにリネームし、$ fが存在しファイルであれば上書きします。

+0

一般的な場合のこの問題は、 'x_'というファイルが存在しないため(エラーを報告する)ファイル' x'があり、ファイルがない 'y_'ファイルが欠けてしまうことがあります'y'。 –

+0

@JonathanLeffler:OK - '$ f_'の存在のテストを追加しました。存在しない場合、ディレクトリyを作成する必要はないと思います。 –

関連する問題