여러 명령을 한 줄로 결합

여러 명령을 한 줄로 결합

myname에 보관된 이라는 디렉터리가 있습니다 . 이제 보관을 취소하고 디렉터리의 모든 파일을 삭제하고 myname.tar싶습니다 (보관 취소 후).myname.tarmyname

위 작업을 수행하는 데 사용하는 명령은 다음과 같습니다.

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 bashBash를 사용하는 경우 Bash( )에 대한 매뉴얼 페이지를 읽고 "제어 연산자"( /control operator+ )를 검색하는 것이 좋습니다 [Enter].

거기에는 |및 같은 것의 다양한 기능이 설명되어 있습니다.;

&&그러나 대신 사용을 고려할 수도 있습니다 ;. 이렇게 하면 이전 함수가 성공한 경우에만 다음 함수를 해당 순서대로 실행할 수 있습니다. 즉 find, 파일을 찾을 수 없으면 압축을 시도하지 않습니다.아무것도 없다:

find -name deleteme.tar && tar xvf deleteme.tar && rm -r delete/* || echo "something went wrong" 1>&2

그러나 이것은 단지 작은 제안일 뿐입니다...

관련 정보