2017-05-24 155 views
1

我有一個非常簡單的重命名腳本,我在OSX終端中運行。它看起來像這樣:bash之間插入延遲

mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1A.tif 

我通常有幾百行代碼的重命名這樣一個爲所有我可以重命名文件。

但是我認爲工作中的網絡安全與代碼混淆,因爲它會隨機插入文件名。我認爲這是中斷代碼,代碼非常簡單,我想不出爲什麼不起作用的另一個原因。

我想嘗試在每行之間添加1秒的延遲,但是如何?我讀過類似睡眠1s可能工作,但我必須在每一行之間添加?如果是這樣的話,那將是一件令人頭疼的事情。如果是,有沒有其他辦法?

更新:我有一個延遲工作,但仍然遇到像以前一樣的問題。這是終端返回的內容:

mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_alternate1.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_alternate1A.tif 
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_alternate2.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_alternate2A.tif 
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_alternate3.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Remv -nvest/1247136_alternate3A.tif 
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_alternate4.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Remv -nTest/1247136_alternate4A.tif 
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_lifestyle.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Renmv -nv /Volume36_lifestyleA.tif 
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_standard.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_standardA.tifç^C^C^C^C^C 

它在拋棄重命名部分中的各種垃圾。它與文件名和目錄名稱混淆,我找不到原因。

+0

有,會爲你自動重命名文件,如果你能說的規則是什麼,有什麼需要改變....即所有字母必須大寫,所有的下劃線必須拆除工具 –

+0

我。 d打賭「頂起來的」條目的名字中有空格你需要引用那些像'mv/path/2/file「/ path w spaces/2/file」'。祝你好運。 – shellter

回答

0

以下腳本只讀取你的命令的文件,並在每個命令後插入一個睡眠

while read curr_line; do 

    echo curr_line $curr_line 

    return_msg=$($curr_line ) # execute cmd 

    # may want to do error checking on value of error variable $? and return_msg 

    sleep 1 

done < ./input_file_of_original_cmds.txt # read in that file 
+0

這不是返回碼,但無論命令轉儲到標準輸出。返回碼在$?中。 – Jack

0

如果你是刨去執行所有這些mv命令,從終端就可以使一個bash別名:

alias mvd='sleep 2s && mv' 

就腳本而言,由於腳本不能理解bash別名(至少很容易),因此可以在腳本的開始處構建一個類似的函數:

function mvd { sleep 2s && mv "[email protected]"; } 

您唯一需要做的就是使用新的mvd命令而不是mv

提示:如果是別名,您還可以命名別名爲mv(與命令名稱相同)。

0

如果你已經有一個具有硬編碼路徑的腳本(例如,腳本的樣子:

mv -nv /path1 /path2 
mv -nv /path3 /path4 
... 

然後可能做是在腳本的頂部加入定義函數的最簡單的事情:

mv() { command mv "[email protected]"; sleep 1; } 
+0

謝謝!這似乎工作,但不幸的是,延遲並沒有阻止重命名升級。我在原始文章中添加了示例,我可能不得不就此開始一個新主題,因爲我現在不知道該怎麼做。 –