2011-03-10 5 views
1

Linux (우분투뿐만 아니라 fedora)에서도 bash 스크립트를 실행하려고하지만 find 명령이 작동하지 않습니다. 이제 터미널 프롬프트에서 작동하는 스크립트에서 작동하지 않음을 찾습니다.

search=\"*${exten[iterext]}\" 
find $direc{iterdir} $r_option -iname $search exec -rm {} \\\; 

는 변수를 설명합니다 : Exten는 direc 명령 줄에서 읽을 디렉토리의 배열입니다 텍스트 파일에서 읽은 파일 확장자와 배열 (여기에 아무 문제)입니다. Iterdir 및 iterext는 정수 정수 변수입니다.

는 지금은 두 가지 문제가이 삭제 또는 I 스크립트 내에서 실행하는 경우 그 문제에 표시되지 않습니다 명령을 찾을 수

1-; 그러나 찾기 및 복사 전에 에코를 넣으면 출력이 명령 프롬프트에 붙여 넣어집니다. 나는 우분투와 페도라 밑에서 스크립트를 시도 했으므로 bash 설정 문제는 아니라고 생각한다. $ search를 하드 코딩 된 문자열 (예 : "* txt")으로 대체하고 스크립트 내에서 작동하므로 따옴표 문제인 것 같아서 문제가 $ 검색에 표시됩니다.

2 - 실행합니다. 전체 find 명령 찾아도 얻을 :.. 그것은 나를 미치게있어 :-(

도와주세요 '간부'에 인수 누락 다음을 매개 변수화에 대해 걱정 find 명령의 모든 배치하여

답변

2

시작 간단한

  1. ${exten[iterext]}${exten[$iterext]}
  2. $direc{iterdir}${direc[$iterdir]}
  3. exec -rm-exec rm
  4. \\\;이 다음은 드라이 런 감사를 수행합니다 \;
  5. 견적 단어 분할을

을 방지하기 위해 변수를해야해야해야해야 echo. 삭제를 수행하기 위해 출력에 만족할 때 echo을 제거하기 만하면됩니다.

find "${direc[$iterdir]}" "$r_option" -name "*${exten[$iterext]}" -exec echo rm {} \; 
+0

브릴리언트 !!!! 그것은 작동합니다. 고마워요! – PTGuy

+0

@PTGuy : NP, StackOverflow에 오신 것을 환영합니다. 체크 표시를 클릭하여 대답을 수락하는 것을 잊지 마십시오. – SiegeX

+0

완료 :-) bash의 인용문은 다소 위독 할 수 있습니다. 예. 올바르게 코드를 복사하지 않았습니다. (필자가 VM 내부에서 실행 중이기 때문에 필기가되었습니다.)하지만 여전히 잘못되었습니다 ... 도움을 주셔서 감사합니다. – PTGuy

0

따옴표 사용은 나에게 조금 이상하게 보입니다.

find "$direc{iterdir}" $r_option -iname "*${exten[iterext]}" -exec -rm "{}" ";" 

아, 그리고 -x 옵션을 쉘 스크립트를 실행 :이보십시오. 이렇게하면 모든 명령 행이 실행되기 전에 인쇄됩니다.

set -x 
find "$direc{iterdir}" $r_option -iname "*${exten[iterext]}" -exec -rm "{}" ";" 
set +x 
+0

인용문 이상으로 그의 명령에는 많은 문제점이 있습니다. 내 대답의 목록을 참조하십시오. – SiegeX

+0

네, 답을 읽은 후에, 나는 그것을 알아 차렸다.지금까지 배열 변수를 사용하지 않았으므로 그 오류를 발견하지는 못했습니다. –

관련 문제