![와일드카드를 사용하여 디렉토리가 아닌 파일만 일치시키려면 어떻게 해야 합니까?](https://linux55.com/image/4746/%EC%99%80%EC%9D%BC%EB%93%9C%EC%B9%B4%EB%93%9C%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EA%B0%80%20%EC%95%84%EB%8B%8C%20%ED%8C%8C%EC%9D%BC%EB%A7%8C%20%EC%9D%BC%EC%B9%98%EC%8B%9C%ED%82%A4%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
라는 파일이 있습니다home/homeLife
/home에 home1 home2 및 home3이라는 파일이 저장되어 있습니다.
로 시작하는 모든 파일을 home*
이동 하고 싶습니다 home/homeLife/.
.
나는 들어갔다
mv home* /home/homeLife
cannot move homeLife into subdirectory of itself
내 질문: 디렉터리를 어떻게 제외하나요?
답변1
zsh
glob 한정자를 사용합니다 .
mv home*(.) dst
이동만정기적인문서.
하지만
mv home*(^/) dst
모든 유형의 파일 이동와는 별개로목차.
mv home*(^-/) dst
디렉토리에 대한 기호 링크도 제외됩니다.
답변2
찾기를 이용하시면 됩니다. 다음이 작동합니다.
find . -name home\* -type f -maxdepth 1 -exec mv {} /home/homeLife/. \;
답변3
Bash를 사용하여 glob을 확장할 수 있습니다.
shopt -s extglob ## activate extglogs if not yet done
mv home!(*Life) homeLife/ ## !(p1|...) = anything except one of the patt
답변4
전역 일치 목록을 편리하게 정리할 수 있습니다.
set --; cd /home
for f in ./home*
do [ ! -L "$f" ] &&
[ -f "$f" ] &&
set "$@" "$f"
done
[ "$#" -eq 0 ] || mv "$@" ./homeLife