[linux] 하나를 제외한 모든 파일 이동

하나를 제외한 모든 파일을 어떻게 이동합니까? 나는 다음과 같은 것을 찾고있다 :

'mv ~/Linux/Old/!Tux.png ~/Linux/New/'

여기서 오래된 물건을 새 물건 폴더로 옮깁니다 Tux.png. ! -sign은 부정을 나타냅니다. 작업을위한 도구가 있습니까?



답변

bash를 사용하고 extglob쉘 옵션을 설정 한 경우 (보통)

mv ~/Linux/Old/!(Tux.png) ~/Linux/New/


답변

.bashrc에 다음을 넣으십시오.

shopt -s extglob

정규식을 확장합니다. 그런 다음 하나를 제외한 모든 파일을

mv !(fileOne) ~/path/newFolder

다른 명령과 관련된 예외

디렉토리를 복사 할 때 스레드에서 알 수 있듯이 이름에 순방향 플래시를 사용할 수 없습니다. 조건을 제외하고 왜 extglob을 제외해야합니까? :

cp -r !(Backups.backupdb) /home/masi/Documents/

Backups.backupdb/부정하기 전에 여기가 잘못 되었으므로 잘못 사용하면 다른 명령과 다른 예외가 발생할 수 있으므로 디렉토리를 이동하는 데 사용하지 않습니다.


답변

나는 전통적인 find & xargs 방식으로 갈 것입니다 :

find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png -print0 |
    xargs -0 mv -t ~/Linux/New

-maxdepth 1재귀 적으로 검색하지 않습니다. 파일 만 신경 쓰면 말할 수 있습니다 -type f. 경로 자체를 결과에 -mindepth 1포함시키지 않습니다 ~/Linux/Old. 포함 된 줄 바꿈이 포함 된 파일 이름을 포함하여 모든 파일 이름에서 작동합니다.

한 의견에 따르면 mv -t옵션은 아마도 GNU 확장 일 것입니다. 없는 시스템

find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png \
    -exec mv '{}' ~/Linux/New \;


답변

빠른 명령은 이동 명령이 일치하지 않도록 tux 파일 이름을 수정하는 것입니다.

예를 들면 다음과 같습니다.

mv Tux.png .Tux.png

mv * ~/somefolder

mv .Tux.png Tux.png


답변

가장 쉬운 방법은 백틱을 사용하는 것입니다.

mv `ls -1 ~/Linux/Old/ | grep -v Tux.png` ~/Linux/New/

편집하다:

별명으로 백 슬래시를 사용하지 말고, 대신 ls는 ls –color로 별명을 지정하십시오.

mv `\ls -1 ~/Linux/Old/ | grep -v Tux.png` ~/Linux/New/

감사합니다 @Arnold Roa


답변

bash의 경우 sth 답변 이 정확합니다. 다음은 zsh (선택한 쉘) 구문입니다.

mv ~/Linux/Old/^Tux.png ~/Linux/New/

필요 EXTENDED_GLOB설정하는 쉘 옵션.


답변

나는 이것이 특정 파일이나 디렉토리를 제외하는 간단한 이동에 조금 더 안전하고 쉽게 의존한다는 것을 알았습니다.

ls -1 | grep -v ^$EXCLUDE | xargs -I{} mv {} $TARGET