2012-03-16 46 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/*_ 

取決於您的發行版,有時稱爲重命名。有時候,有一個ELF格式的,但perl的一個要求,你可以測試這樣的:file $(readlink -f $(type -p rename))

+0

工程就像一個魅力! – 2012-03-16 01:40:04

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 

測試可以作出更細檢查$ F_是test -f $f_一個文件,我可以提供一個測試,以確保,即$ F存在且是一個目錄:

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

如果沒有目錄$ F,上面的命令WOU ld將$ f_重命名爲$ f,如果$ f存在,並且是一個文件,則覆蓋。

+0

這種情況在一般情況下的問題是可能有一個'x'文件,其中沒有文件'x_'(所以它會報告一個錯誤),並且會丟失沒有文件的文件'y_' 'y'。 – 2012-03-16 03:07:43

+0

@JonathanLeffler:好的 - 我添加了一個'$ f_'存在的測試。如果它不存在,我認爲我不應該創建一個目錄。 – 2012-03-16 05:07:47

相關問題