하나를 제외한 모든 파일을 어떻게 이동합니까? 나는 다음과 같은 것을 찾고있다 :
'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