2014-07-09 36 views
0

我試過搜索,但是找不到類似的問題。如果這是重複的,請讓我知道,我很樂意將其刪除。bash`mv -n`檢測是否覆蓋

我有一個腳本重命名一個循環內的文件,運行:

mv -vn "$file" $newname 
if [ $? -eq 0 ] 
then 
    *do something* 
fi 

隨着-v我可以在屏幕上xxx not overwritten看到,但我想,當一個文件不重命名檢測通過腳本由於具有相同名稱的文件已經存在。

mv實用程序在成功時退出0,這是否是文件被重命名的情況。

任何指針?

+1

你就不能使用'ls'上在嘗試移動之前的文件名? 'ls'將會爲'文件不存在'和'文件存在'返回不同的值。 –

+1

@FlorinStingaciu Ughhh ...不,不解析'ls'輸出。但是,像'if [[-a「$ {newname}」]];那麼......會檢查文件是否存在。 – twalberg

+0

@twalberg - 比賽條件。 –

回答

1

您可以檢查文件是否存在,如果不重命名:

test -e $newname || mv $file $newname

如果您需要消息說XXX不會被覆蓋:

test -e $newname && echo "$newname not overwritten" || mv $file $newname 
+0

哇,我有這些眼罩......我應該一直在想這些......謝謝! – Lyndon

+1

很高興幫助:) – Tiago

+0

謹防競態條件,雖然... –