2017-09-25 67 views
1

我遇到了命令失敗的問題,因爲我期望它們在某個目錄中執行,但情況並非如此。如何使腳本獨立於執行的位置

比如我想做的事:

pdfcrop --margins '0 0 -390 0' $pag "$pag"_1stCol.pdf 

創建一個新的PDF文檔,然後

mv `\ls /home/dir | grep '_1stCol'` /home/gmanglano/dir/columns 

的問題是,mv命令失敗,因爲它找到的文件,它正在嘗試將該文件從我執行腳本的目錄中找到,而不是從其中找到的位置移動。

這種情況經常發生在我身上,我覺得有一個我缺少的概念,或者我認爲這是一種錯誤的方式。

我得到的錯誤是:

mv: cannot stat '1stCol.pdf': No such file or directory 

當有,其實,說失敗,它只是不是我發起了腳本的目錄。

+1

順便說一句,如果你同時引用'$ pag'的擴展 - 比如'pdfcrop --margins'0 0 -390 0'「$ pag」「$ {pag} _1stCol.pdf」' - without引用第一個,如果它包含空格,通配符等(或者是空的,在這種情況下它可以變成* zero *參數),它可以分成任意數量的單獨的'pdfcrop'參數。 –

+1

這裏不需要'\ ls'(儘管你不應該使用'ls'非交互) - 腳本中沒有別名,除非你明確地打開它們並定義它們(它們關閉非交互式shell中的默認設置)。 –

回答

4

而不是用ls和反引號和所有這些,只需使用find命令。它的建成,對於查找文件,然後執行基於該發現結果的命令:

find /home/dir -name "*_1stCol.pdf" -exec mv {} /home/gmanglano/dir/columns \; 

這是尋找在/home/dir姓名相符*_1stCol.pdf的文件,然後移動它們。 {}是找到的文件的標記。

+0

當我想進行負面搜索時怎麼辦?我一直在使用grep來回查找並找到這個任務,在這種情況下,我最終使用了** mv'\ ls/home/dir | grep -xv「pdf.pdf」'/ home/dir2 **,這就是奇怪的原因。有任何想法嗎?我無法找到如何與查找 –

+0

我認爲'find'仍然是一個很好的解決方案。 [檢查這個問題](https://stackoverflow.com/questions/1341467/unix-find-for-finding-file-names-not-ending-in-specific-extensions)使用'-not'標誌'find'。這是一個可怕的多功能工具。 – JNevill

+0

但是,這是尋找一個正則表達式。用** grep -xv **,我可以匹配確切的名稱。對不起,如果我是過度複雜的問題。 –

3

Don't parse the output of ls:如果你簡化mv命令

mv /home/dir/*_1stCol.pdf /home/gmanglano/dir/columns 

,那麼你不會有一個問題,在錯誤的目錄之中。

相關問題