와일드카드를 사용하여 디렉토리가 아닌 파일만 일치시키려면 어떻게 해야 합니까?

와일드카드를 사용하여 디렉토리가 아닌 파일만 일치시키려면 어떻게 해야 합니까?

라는 파일이 있습니다home/homeLife

/home에 home1 home2 및 home3이라는 파일이 저장되어 있습니다.

로 시작하는 모든 파일을 home*이동 하고 싶습니다 home/homeLife/..

나는 들어갔다

mv home* /home/homeLife
cannot move homeLife into subdirectory of itself

내 질문: 디렉터리를 어떻게 제외하나요?

답변1

zshglob 한정자를 사용합니다 .

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

관련 정보