簡而言之,寫了一個小腳本來清理一些目錄,我已經合併了多個來源的目錄/文件,其中我使用cp
命令和--backup=numbered
功能,以便具有相同名稱的文件具有附加後綴.~1~
以避免覆蓋。然後,我運行fdupes
刪除重複的文件,在某些情況下,fdupes
刪除了沒有從cp命令(原始文件)追加後綴的文件,所以我想掃描目錄查找帶有後綴cp
命令的文件如果該文件不存在與後綴刪除,我會移動mv
該文件,否則我會離開它,以避免刪除任何東西fdupes
並不認爲它是重複的。找到返回的結果
問題是測試條件if [ -f ... ]
下面的代碼的一部分返回倒過來的結果比它應該和我不明白爲什麼。例如,當文件存在時它將返回false,當文件不存在時它將返回true。我通過顛倒我想要根據倒排返回碼進行的操作來解決這個問題,並驗證它是按照預期工作的,並且它是這樣運行的,但是想知道是否有人知道它爲什麼會按照它的方式工作。我不是任何方式的bash腳本專家,所以我可能錯過了一些簡單的東西。
#!/bin/bash
logfile=$$.log
exec > $logfile 2>&1
IFS='
'
#set -f
for FILE in $(find . -type f -regextype posix-extended -regex '^.*(\.~[0-9]+~)+$')
do
FILE2=${FILE%%.~[0-9]*} # remove the suffix
if [ -f "${FILE2}" ]
then
echo ERROR: "${FILE2}" already exists!
else
echo "${FILE}" renamed "${FILE2}"
mv "${FILE}" "${FILE2}"
fi
done
我會去Python或Perl爲此。在所有文件上執行'os.walk()',創建一個'dict',其中的鍵是後綴名,值是最近的後綴。如果您看到較小的數字,請替換該值;如果您看到裸露的文件名,請將其取消。現在,最後,包含一個數字的dict中的任何條目都包含最新的備份文件,其中thre不是主文件;循環並移動。 – tripleee 2015-02-11 09:35:19