myname
에 보관된 이라는 디렉터리가 있습니다 . 이제 보관을 취소하고 디렉터리의 모든 파일을 삭제하고 myname.tar
싶습니다 (보관 취소 후).myname.tar
myname
위 작업을 수행하는 데 사용하는 명령은 다음과 같습니다.
find -name deleteme.tar
tar -xvf deleteme.tar
rm -r delete/*
이러한 개별 명령은 제대로 작동하지만 한 줄 명령이 필요하므로 다음을 시도했습니다.
find -name deleteme.tar | tar -xvf deleteme.at | rm -r delete/*
다음 오류가 발생합니다.
"rm -r deleteme/*
rm: cannot remove `deleteme/*': No such file or directory "
내가 뭘 잘못했나요?
답변1
당신이 찾고 있는 기호는 다음과 같습니다.제어 연산자. 잘못된 것을 사용하고 있습니다. ;
또는 가 필요합니다 &&
.
를 사용하면 ;
이전 명령이 성공적으로 종료되었는지 여부에 관계없이 명령이 순차적으로 실행됩니다.
를 사용하면 &&
실패한 각 명령은 다음 명령의 실행을 차단합니다.
예를 들어 더 많은 내용을 읽을 수 있습니다.8.1.제어 연산자
답변2
man bash
Bash를 사용하는 경우 Bash( )에 대한 매뉴얼 페이지를 읽고 "제어 연산자"( /control operator+ )를 검색하는 것이 좋습니다 [Enter].
거기에는 |
및 같은 것의 다양한 기능이 설명되어 있습니다.;
&&
그러나 대신 사용을 고려할 수도 있습니다 ;
. 이렇게 하면 이전 함수가 성공한 경우에만 다음 함수를 해당 순서대로 실행할 수 있습니다. 즉 find
, 파일을 찾을 수 없으면 압축을 시도하지 않습니다.아무것도 없다:
find -name deleteme.tar && tar xvf deleteme.tar && rm -r delete/* || echo "something went wrong" 1>&2
그러나 이것은 단지 작은 제안일 뿐입니다...