2014-10-29 139 views
0

我有一個問題,我得到的作業似乎適用於我自己的測試。我將在下面發佈腳本和錯誤。 bash腳本將文件移動到同一目錄中具有舊擴展名的文件

#!/bin/bash 
for file in $1 
do $file | grep \.old$ > /dev/null 
if [ "$file" != 0 ] 
then mv $file $file.old 
else $file 
fi 
done 

Files created in 'testdir: 

file1 file2.old file3old file4.old 

Execution of 'oldfiles testdir': 


'oldfiles testdir' incorrectly produced some output or errors: 
for file in $1 
    do $file | grep \.old$ > /dev/null 
    if [ "$file" != 0 ] 
    then mv $file $file.old 
    else $file 
    fi 
done 
+ for file in '$1' 
+ grep '.old$' 
+ /var/tmp/uli101.npkrause.assign4.8938.testdir 
/home/npkrause/scripts/oldfiles: line 4: /var/tmp/uli101.npkrause.assign4.8938.testdir: Is a directory 
+ '[' /var/tmp/uli101.npkrause.assign4.8938.testdir '!=' 0 ']' 
+ mv /var/tmp/uli101.npkrause.assign4.8938.testdir /var/tmp/uli101.npkrause.assign4.8938.testdir.old 

Files in 'testdir' after 'oldfiles' was run: 
ls: cannot access /var/tmp/uli101.npkrause.assign4.8938.testdir: No such file or directory 

Filenames don't seem to be correct 

Please hit <Enter> to continue with the Assignment 
+2

腳本應該做什麼?你還沒有告訴我們足夠的工作來解決「似乎行得通」的意思或你嘗試過的測試。 – 2014-10-29 21:43:52

+0

你不能執行一個文件或目錄,它是'$ file | grep ...正在嘗試去做。您希望將該文件作爲參數提供給grep。 'grep'\ .old $'「$ file」'。 – 2014-10-29 21:48:26

+0

您應該通過[shellcheck.net](http://shellcheck.net)運行您的腳本並修復它報告的警告,然後嘗試弄清楚您的腳本實際上應該做什麼,因爲現在不在全部清楚(或者必然更理智)。 – 2014-10-29 21:49:39

回答

0
dir=$1 
for file in "$dir"/* ; do 
    [[ $file == *.old ]] || mv -- "$file" "$file.old" 
done 

報價爲$目錄和$文件中的所有用途(雙括號內的除外),以防止在名稱中使用空格或元字符。

使用'mv - '來防止以' - '開頭的目錄名稱。

+0

感謝它的工作 – 2014-10-30 10:26:32

相關問題