이라는 특정 파일을 제외하고 현재 디렉터리의 모든 파일을 로 NewDir
끝나는 디렉터리 로 이동하고 싶습니다 .*.bam
special.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/