2017-10-25 1 views
1

일부 파일을 복사하는 bash 스크립트가 있지만 제대로 작동하지 않는 것 같습니다. 부수적 인 점은 소스 디렉토리에 일치하는 파일이 없다는 것입니다. 복사 할 파일이 하지만 스크립트의 점은 파일을 복사하는 것입니다.bash 스크립트의 Odd cp 동작

내가 할 노력하고있어의 기본 조각 : 내 스크립트에 -x 설정 추가하는 경우

Usage: cp [-fhipHILPU][-d|-e] [-r|-R] [-E{force|ignore|warn}] [--] src target 
or: cp [-fhipHILPU] [-d|-e] [-r|-R] [-E{force|ignore|warn}] [--] src1 ... srcN directory 

에서

source_loc=/u01 
target_log=/u02 
/usr/bin/cp "$source_loc"/dir/*file* "$target_loc"/dir/ 

결과, 나는 ...

이를 얻을 수
+ /usr/bin/cp /u02/dir/ 
Usage: cp [-fhipHILPU][-d|-e] [-r|-R] [-E{force|ignore|warn}] [--] src target 
or: cp [-fhipHILPU] [-d|-e] [-r|-R] [-E{force|ignore|warn}] [--] src1 ... srcN directory 
+ set +x 

이것에 대한 특이한 점은 내가 을 다시 실행하면 스크립트 w 아무것도 변경 ithout, 내 출력으로이 얻을 :

cp: /u01/dir/*file*: No such file or directory 
이제

나는 소스 파일을 일치하는이 스크립트를 테스트하지 않았습니다 (나는 매우 곧 될 것입니다)하지만 난 확실히 내가 실종 아니에요을 만들고 싶어 어떤 것. 오류가 발생하는 것에 신경 쓰지 않고 올바른 오류 (예 : 해당 파일이나 디렉토리가 없음)를 얻고 싶습니다.

어떤 통찰력도 인정 될 것입니다.

+0

일치하는 파일 테스트를 기다리고 있습니다. – Blacksilver

+0

좋습니다. 고맙습니다. 불행히도 실제 스크립트는 실행하는 데 약간의 시간이 걸리기 때문에 약간의 시간이 걸릴 수 있습니다. 나는 시험하고있다. 위의 잘못된 점에 대해서는 무엇인가 잘못 되었습니까? –

+1

'find'를 사용해야합니까? 'find $ source_loc/dir/-type f -exec cp {} $ target_loc/dir/\;' –

답변

1

@elliotfrisch에 의해 제안 당신은 find를 사용할 수 있습니다 배쉬에서,

find "$source_dir/dir" -type f -name "*file*" -maxdepth 1 -exec cp {} "$target_loc/dir" \; 

또는 배열이 비어 있지 때 배열로 글로브 결과를 캡처하고 cp를 호출 할 수 있습니다

shop -s nullglob # glob expands to nothing if there are no matching files 
files=("$source_loc/dir/"*file*) 
((${#files[@]} > 0)) && cp "${files[@]}" "$target_loc"/dir/ 
+1

분명히 내 코드에 버그가있었습니다. 그들이 @ 방향으로 나를 지적했기 때문에 @ codeforester의 답을 옳게 표시했습니다. 따라서이 복사본을 시도하기 전에 실행되는 함수가 있습니다. 그리고이 함수에서는 shop-nullglob을 설정했습니다. 그리고 기능의 끝 부분에서 설정을 해제하려고 시도했지만 오타가있었습니다. 트릭은이 함수가 이전에 실행되지 않은 경우에만 실행된다는 것입니다 (따라서 후속 실행이 예상 된 오류를 반환하는 이유). shop -u nullglob을 수행하기 위해 코드를 업데이트했으며 예상 된 파일이나 디렉토리 메시지를받지 못했습니다. 경기가있을 때 아무런 문제가 없다는 점에 유의하십시오. –