파일 이름과 일치하는 파일을 제외한 모든 파일 이동

파일 이름과 일치하는 파일을 제외한 모든 파일 이동

이라는 특정 파일을 제외하고 현재 디렉터리의 모든 파일을 로 NewDir끝나는 디렉터리 로 이동하고 싶습니다 .*.bamspecial.file.bam

이 명령을 찾았습니다삭제모든 파일이 있지만 방법을 모릅니다.이동하다삭제하는 대신 다음을 수행하세요.

find . ! -name 'special.file.bam' -type f -exec rm -f {} +

답변1

쉘이 bash 쉘인 경우 확장 전역 변수를 활성화하여 다음을 수행할 수 있습니다.

shopt -s extglob
mv -- !(special.file).bam temp/

오류 억제:"bash: /usr/bin/mv: Argument list too long" 특정 패턴과 일치하는 파일이 너무 많으면 다음을 수행하세요.

for file in !(special.file).bam; do
    mv -- "$file" temp/
done

또는 find명령 대체 및 이식성을 사용하십시오.

find . -path './*' -prune -type f -name '*.bam' ! -name 'special.file.bam' \
    -exec sh -c 'for file; do mv "$file" temp/; done' sh_mv {} +

섹션을 삭제하면 -path './*' -prune하위 디렉터리의 파일도 찾을 수 있습니다.

답변2

 find . -maxdepth 1 -type f -name "*.bam" ! -name "special.file.bam" -exec mv {} NewDir \;

답변3

파일 수가 명령줄 길이를 초과하는 경우에도 를 사용해야 합니다 . 예를 들어 null로 구분된 파일( ) find과 함께 사용하는 것이 좋습니다 .xargs\0

find . -maxdepth 1 -type f -name '*.bam' ! -name 'special.file.bam' -print0 |
xargs -0 mv -t /path/to/destination

참고: 철저한 테스트가 이루어지지 않았으므로 주의해서 사용하십시오.

답변4

mv -f $(find ./*.bam -maxdepth 1 ! -name "special.file.bam" -type f) NewDir/ 

관련 정보