"mv"가 자동으로 실패하게 만드는 방법이 있나요?

"mv"가 자동으로 실패하게 만드는 방법이 있나요?

mv foo* ~/bar/일치하는 파일이 없으면 비슷한 명령이 stderr에 이 메시지를 생성합니다 foo*.

mv: cannot stat `foo*': No such file or directory

그러나 제가 작업 중인 스크립트에서는 이 상황이 전혀 문제가 없으므로 로그의 메시지를 무시하고 싶습니다.

mv아무것도 움직이지 않을 때에도 조용히 하라고 말할 수 있는 좋은 방법이 없을까요?

답변1

이것을 찾고 계십니까?

$ mv  file dir/
mv: cannot stat ‘file’: No such file or directory
$ mv  file dir/ 2>/dev/null
# <---- Silent ----->

답변2

사실, 음소거는 좋은 접근 방식이 아니라고 생각합니다 mv. 관심을 가질 만한 다른 사항이 보고될 수도 있다는 점을 명심하세요. 예를 들어, 누락 등이 있습니다 ~/bar. 결과가 반환되지 않는 경우에만 glob 표현식을 침묵시키면 됩니다. 실제로 전혀 구현하지 마십시오.

[ -n "$(shopt -s nullglob; echo foo*)" ] && mv foo* ~/bar/

그다지 매력적으로 보이지 않으며 bash.

또는

[ 'foo*' = "$(echo foo*)" ] || mv foo* ~/bar/

bash컬렉션 에 속하지 않는 한 nullglob. 그러나 3배 반복되는 글로브 패턴의 대가를 지불하게 됩니다.

답변3

find . -maxdepth 1 -name 'foo*' -type f -print0 | xargs -0r mv -t ~/bar/

— GNU에는 mv멋진 "대상 우선" 옵션( -t) 이 있으며 xargs입력이 전혀 없으면 명령 실행을 건너뛸 수 있습니다( -r). 파일 이름에 공백 및 기타 "흥미로운" 내용이 포함되어 있을 때 혼동이 발생하지 않도록 하려면 -print0및 를 사용하세요 .-0

답변4

이것이 최선은 아닐 수도 있지만 find다음 명령을 사용하여 폴더가 비어 있는지 확인할 수 있습니다.

find "foo*" -type f -exec mv {} ~/bar/ \;

관련 정보