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/ \;