디렉토리가 있는지 확인하고 하나의 명령으로 삭제하십시오.


107

Unix에서 단일 명령을 사용하여 디렉토리가 있는지 확인하고 삭제할 수 있습니까? 원격 시스템에서 단일 명령 만 실행할 수있는 ANT 'sshexec'작업을 사용하는 상황이 있습니다. 그리고 디렉토리가 있는지 확인하고 삭제해야합니다 ...


왜 rmdir을 사용하지 않습니까? 디렉토리가 없으면 실패합니다.
Ferruccio 2011 년

4
실패합니다. 그리고 내 ANT 스크립트에 오류가 있습니다. 내 빌드가 충돌합니다.
remo

을 사용 mkdir -p하면 오류가 이미있는 경우 무시됩니다.
user562374

2
@ Ferruccio- using rm -rf / dir_name은 오류를 발생시키지 않지만 rm -rf / dir_name은 No such file or directory found라고 말합니다. (방금 테스트)
remo

3
@remo 형제 당신은 두 번 같은 명령을 게시
마르코스 페레이라에게

답변:


149

$WORKING_DIR디렉토리에 설정되어 있다고 가정하면 ...이 한 줄짜리가해야합니다.

if [ -d "$WORKING_DIR" ]; then rm -Rf $WORKING_DIR; fi

(그렇지 않으면 디렉토리로 바꾸십시오)


163

왜 그냥 사용하지 rm -rf /some/dir않습니까? 디렉토리가 있으면 제거하고 그렇지 않으면 아무 작업도 수행하지 않습니다. rm -r /some/dir이 유형의 명령 과 달리 폴더가 존재하지 않으면 충돌하지 않습니다.


13
원래 질문은 파일 / 디렉토리가 존재하거나 존재하지 않을 때만 삭제를 수행한다는 의미라고 생각합니다. 이 명령은 작동하고 유사한 결과를 생성 할 수 있지만 실제로 명령이 더 의미가 있기 전에 테스트를 수행합니다.
Ankur Chauhan

5
@AnkurChauhan +1, dir이 존재하지 않으면 경고를 받았습니다.
inf3rno 2015-08-25

12
이것은 질문에 대한 답이 아닙니다.
xpto

10
위에서 언급했듯이 이것은 답이 아닙니다. 삭제하기 전에 테스트하는 한 가지 이유는 Jenkins 작업 내부에 있습니다. 디렉토리가 존재하지 않고 삭제하려고하면 작업이 실패합니다. 미리 확인하는 것이 더 좋은 선택입니다.
lumberjacked

8
나는 이것이 정답이라고 생각합니다. @remo가 필요로하는 작업을 수행합니다. 즉, 존재하는 경우에만 디렉토리를 삭제하고 그렇지 않은 경우 오류를 제공하지 않습니다. 이 명령이 신경 쓰이지 않을 때 왜 존재를 확인해야하나요?!
pedram bashiri

32

시험:

bash -c '[ -d my_mystery_dirname ] && run_this_command'

편집 : 원격 컴퓨터에서 bash를 실행할 수 있으면 작동합니다 ....

편집 2 : bash에서 [ -d something ]'something'이라는 디렉토리가 있는지 확인하고 존재하고 디렉토리이면 성공 코드를 반환합니다. &&로 명령을 연결하면 첫 번째 명령이 성공한 경우에만 두 번째 명령이 실행됩니다. 따라서 [ -d somedir ] && command디렉토리가있는 경우에만 명령을 실행합니다.


예, 셸에서 시도하여 원하는 것인지 확인하십시오.
sinelaw

먼저 로컬에서 작동하는지 확인하고 원격으로 명령을 보낼 수 있습니다. "/ test"directory..just [-d / test] && mkdir / test를 확인하라고 말하고 있습니까?
remo

1
디렉토리가 존재하는지 확인하기 때문에 존재하면 오류가 발생하고, 존재한다면 생성을 시도합니다. 그것이 나를 위해하는 일입니다 (방금 테스트). 디렉터리를 만들면 안됩니다. 삭제를 원하기 때문에 아마도 다음이 필요할 것입니다 : [ -d /test ] && rmdir /test(또는 비어 있지 않고 모든 내용을 삭제하려는 경우 rm -rf / test)
sinelaw

@SineLaw : 참고-디렉토리가 존재하고 디렉토리를 만들려고 할 때 오류가 발생하지 않았습니다! (다시 테스트했습니다). 그러나 DELETE의 경우 작동합니다. 다시 확인하십시오
remo

sharma : bash를 사용하고 있습니까? 'echo $ SHELL'은 무엇을 말합니까?
sinelaw

0

다음은 또 다른 라이너입니다.

[[ -d /tmp/test ]] && rm -r /tmp/test
  • &&는 이전 명령문이 성공적으로 실행 된 경우에만 다음 명령문을 실행 함을 의미합니다 (종료 코드 0 반환).
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.