2013-10-19 35 views
0

我需要編寫一個基本程序,它可以在用戶指定的目錄中查找具有奇數(不均勻)大小的文件,然後重命名它們。我寫了一個代碼,但無法弄清楚它有什麼問題,因爲我只是剛剛開始編程bash腳本......我的目錄中有3個文件,這裏是我爲他們獲取的錯誤:「命令未找到」(簡單的bash腳本)

./Untitled: line 18: AppIcon.icns: command not found 

mv: cannot stat ‘AppIcon.icns’: No such file or directory 
./Untitled: line 18: AssociatedVm.txt: command not found 

mv: cannot stat ‘AssociatedVm.txt’: No such file or directory 
./Untitled: line 18: Info.plist: command not found 

mv: cannot stat ‘Info.plist’: No such file or directory 

我的腳本代碼:

#!/bin/bash 

n=0 

echo 「Specify directory」 

read directory 

if [ -d $directory ]; then 

     echo 「Directory found」 

else 
    echo 「Directory not found」 

exit 0 

fi 

for file in $(ls $directory); 

do 

fsize=$(stat "$directory/$file" -c %s) 


if [ $((fsize%2))=1 ]; then 


mv "$directory/$file" "$directory/$file.odd" 


n=$((n + 1)) 


fi 
done 

echo 」Number of renamed files: $n 」 
+0

不解析'ls'。使用殼球。並引用。 –

回答

2

我認爲你的意思

fsize=$(stat "$file" -c %s) 

,但你寫

fsize=stat "$file" -c %s 

此外,如果您從不是$directory的目錄運行腳本,則需要單獨使用絕對路徑($directory/$file)而不是$file

Bash使用-eq的整數比較,所以你也應該改變

if [ $((fsize%2))=1 ]; then 

if [ $((fsize%2)) -eq 1 ]; then 

什麼是-c %s呢?我在stat手冊頁中看不到-c選項。你的意思是-f? (編輯:好的,我一直在尋找在蘋果stat命令(即BSD)在GNU versionstat的格式規範使用-c。)

+0

謝謝,它修復了錯誤(我更新了代碼)。 HOVEWER,​​出於某種原因現在它重命名目錄中的所有文件。我怎樣才能讓它重新命名爲不平整(奇數)尺寸的那些?我現在混淆了自己大聲笑。 - – SmOg3R

+0

啊,bash使用'-eq'來進行整數比較,所以你應該把'$((fsize%2))= 1'更改爲'$((fsize%2))-eq 1'(更新了答案) )。 –

+0

它的工作原理!謝謝! – SmOg3R