2016-02-02 46 views
0

我想在目錄中的每個文件的開頭添加一個文本字符串。字符串是uniwisc將文本添加到文件名的起始位置

當我運行該腳本:

#!/bin/sh 

url="ftp://rammftp.cira.colostate.edu/Lindsey/spc/ir/" 

wget -r -nd --no-parent -nc -P /awips2/edex/data/goes14/ $url 

find /awips2/edex/data/goes14/ -type f -exec cp {} /awips2/edex/data/uniwisc/ \; 

for f in /awips2/edex/data/uniwisc/*; 
    do 
    f="$(basename $f)" 
    mv "$f" "uniwisc.$f" 
    done; 

find /awips2/edex/data/uniwisc/ -type f -mmin -6 -exec mv {} /awips2/edex/data/manual/ \; 
exit 0 

我得到的錯誤mv: cannot stat '<filenames>' "No such file or directory.

+1

使用'basename'。 –

+1

訪問變量時,除非您肯定沒有空格字符或者您想要這種行爲,否則通常會將它們用引號引起來。在這種情況下,你應該有''$ f''而不是'$ f'。如果您試圖將文件移動到「讓我開心」,那麼代碼類似於您所寫的代碼將會失敗的一個例子。您將收到一條錯誤消息,指出文件'happy'不存在,然後顯示錯誤消息,指出文件'me'不存在(假設單個文件'happy'和'me'不存在) , –

+1

謝謝@ mklement0。 –

回答

0

有許多不同的方式,你可以做到這一點。

使用paramater膨脹,其被內置於bash外殼:

for f in <dir path>/*; do 
    mv "$f" "${f%/*}/uniwisc.${f##*/}" 
done 

使用重命名的命令:

rename 's!^!uniwisc.!' * 

使用basename,如CodeGnome建議:

for f in <dir path>/*; do 
    mv "$f" "$(dirname "$f")/uniwisc.$(basename "$f")" 
done 

我打算寫更多的方法,但有很多,他們不' t顯着改變。就我個人而言,我會在這種情況下使用rename命令。

+1

注意上面的循環,它們不保留目錄信息,並且要小心使用'rename'命令,它沒有內置的保護措施,如果你有寫權限,它將不管寫什麼。在重命名關鍵文件之前仔細檢查。 –

+0

謝謝大衛。我正在使用echo命令來查看在真正調用實際命令之前發生了什麼。我也嘗試了「移動」命令,但遇到了以下問題:「沒有這樣的文件或目錄。」當使用echo執行時,它會正確地重命名它,但是如果在沒有echo的情況下調用該命令會導致該錯誤。我應該在那裏添加一條路徑嗎? –

+0

我想我錯過了一個引號,這給了我錯誤。 +1 –

相關問題