2017-09-25 8 views
1

명령이 실행되지 않는 문제는 일부 디렉토리에서 실행되기 때문에 실행 중입니다. 예를 들어 스크립트가 실행되는 위치로부터 독립적으로 만드는 방법

내가하고 싶은 :

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

새로운 PDF 문서를 만들려면 다음

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

문제는이 문서를 발견하기 때문에 mv 명령이 그것을 실패이다 이 파일을 찾은 곳이 아닌 스크립트를 실행 한 디렉토리에서 찾은 파일을 이동하려고합니다.

이것은 나에게 다소 자주 일어나는 일이며, 내가 누락 된 개념이 있거나 내가 이것을 잘못된 길 arround로 생각하고 있다고 느낍니다.

내가 오류는 다음과 같습니다있을 때

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

, 사실, 그냥 내가 스크립트를 시작 디렉토리에없는 실패했다.

+1

BTW,'$ pag'의 확장을 인용 할 때 더 좋습니다. -, pdfcrop --margins '0 0 -390 0' "$ pag" "$ {pag} _1stCol.pdf"'- 첫 번째 것을 인용하면 공백, 와일드 카드 등을 포함하는 경우 (또는 공백 인 경우 * 0 * 인수가 될 수 있음) 여러 개의 별도의'pdfcrop' 인수로 분할 될 수 있습니다. –

+1

그리고 여기에는'\ ls'이 필요 없습니다 (어쨌든'ls'을 비 대화식으로 사용해서는 안됩니다). 명시 적으로 설정하고 정의하도록하지 않으면 스크립트에 별명이 없습니다. - 비 대화식 셸에서는 기본적으로). –

답변

4

ls으로 원숭이를하는 대신 backticks와 그 모든 것을 사용하려면 find 명령을 사용하십시오. 그것은 그 발견의 결과에 따라 명령을 파일을 찾은 다음 실행하기 위해 만들어진 것 :

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

이는 이름 *_1stCol.pdf 일치 /home/dir에서 파일을 찾는 것은 그들을 이동합니다. {}은 발견 된 파일의 토큰입니다.

+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' 플래그를 사용하려면 '찾기 '. 그것은 무서운 다목적 도구입니다. – JNevill

+0

하지만 그것은 정규식을 찾고 있습니다. ** grep -xv **를 사용하면 정확한 이름과 일치시킬 수 있습니다. 죄송합니다. 문제가 너무 복잡해집니다. –

3

Don't parse the output of ls : 당신이

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

mv 명령을 단순화하면 다음 잘못된 디렉토리에있는에 문제가 없습니다.