하나의 파일을 제외한 모든 파일 이동
하나의 파일을 제외한 모든 파일을 이동하려면 어떻게 해야 합니까?다음과 같은 것을 찾고 있습니다.
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
을 새 로 옮깁니다.폴더를 제외하고Tux.png
.!-sign은 부정을 나타냅니다.그일 위위 ?? ?? ?? ??
하여 bash를 extglob
셸통통 ( 통통통통통통통통통 。
mv ~/Linux/Old/!(Tux.png) ~/Linux/New/
.bashrc에 다음 내용을 추가합니다.
shopt -s extglob
정규식을 확장합니다.다음으로 1개를 제외한 모든 파일을 이동할 수 있습니다.
mv !(fileOne) ~/path/newFolder
다른 명령어와 관련된 예외
디렉토리를 복사할 때 스레드에 표시된 이름으로 Forward-Flash를 사용할 수 없습니다.왜 extglob은 breaking except condition입니까?
cp -r !(Backups.backupdb) /home/masi/Documents/
Backups.backupdb/
여기서 부정은 잘못된 것이며, 다른 명령어와 함께 globs를 잘못 사용할 수 있고 다른 예외도 있을 수 있기 때문에 이동 디렉토리에서 사용하지 않을 것입니다.
저는 전통적인 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 'MV'가-t
GNU를 사용하다 없는
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png \
-exec mv '{}' ~/Linux/New \;
빠른 방법은 이동 명령이 일치하지 않도록 턱스 파일 이름을 변경하는 것입니다.
예를 들어 다음과 같습니다.
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는 ls --color로 에일리어스 됩니다.
mv `\ls -1 ~/Linux/Old/ | grep -v Tux.png` ~/Linux/New/
감사합니다 @Arnold Roa
bash는 정답입니다.zsh(내 선택 셸) 구문은 다음과 같습니다.
mv ~/Linux/Old/^Tux.png ~/Linux/New/
필요EXTENDED_GLOB
설정할 셸 옵션입니다.
특정 파일이나 디렉토리를 제외하는 간단한 이동에는 이 방법이 좀 더 안전하고 사용하기 쉽다고 생각합니다.
ls -1 | grep -v ^$EXCLUDE | xargs -I{} mv {} $TARGET
이것은 더 간단하고 기억하기 쉬울 수 있고 나에게도 효과가 있다.
mv $(ls ~/folder | grep -v ~/folder/exclude.png) ~/destination
다음은 100% 보장된 방법이 아니므로 스크립팅에는 전혀 시도하지 마십시오.단, 인터랙티브한 셸을 빠르게 사용할 수 있는 경우도 있습니다.파일 glob 같은 것
[abc]*
(a, b 또는 c로 시작하는 이름을 가진 모든 파일과 일치함)는 "^" 문자를 먼저 삽입하여 부정할 수 있습니다.
[^abc]*
예를 들어 다음과 같이 "lost+found" 디렉토리와 일치하지 않을 때 사용합니다.
mv /mnt/usbdisk/[^l]* /home/user/stuff/.
물론 l로 시작하는 다른 파일이 있다면 나중에 처리해야 합니다.
그럼 어떻게 해?
mv $(echo * | sed s:Tux.png::g) ~/Linux/New/
폴더 안에 있어야 하는데.
이 일은 없어도 할 수 있다.grep
다음과 같습니다.
ls ~/Linux/Old/ -QI Tux.png | xargs -I{} mv ~/Linux/Old/{} ~/Linux/New/
주의:-I
captial i이며 captial i를 만듭니다.ls
명령어는 뒤에 나열된 Tux.png 파일을 무시합니다.
의 출력ls
파이프로 연결되다mv
경유로xargs
mv의 소스 인수로 ls 출력을 사용할 수 있습니다.
ls -Q
는 ls별로 나열된 파일 이름을 따옴표로 묶을 뿐입니다.
mv `find Linux/Old '!' -type d | fgrep -v Tux.png` Linux/New
find 명령어는 모든 일반 파일을 나열하고 fgrep 명령어는 Tux.png를 필터링합니다.백틱은 결과 파일목록을 이동하도록 mv에 지시합니다.
ls ~/Linux/Old/ | grep -v Tux.png | xargs -i {} mv ~/Linux/New/'
모든 파일(파일 제외 제외)을 except_file로 이동합니다.
find -maxdepth 1 -mindepth 1 -not -name except_file -print0 |xargs -0 mv -t ./except_file
예를 들어 (파일을 제외한 캐시는 현재)
find -maxdepth 1 -mindepth 1 -not -name cache -print0 |xargs -0 mv -t ./cache
언급URL : https://stackoverflow.com/questions/670460/move-all-files-except-one
'programing' 카테고리의 다른 글
.gitignore 파일 작성 방법 (0) | 2023.04.17 |
---|---|
워크시트 클래스의 ShowAllData 메서드가 실패했습니다. (0) | 2023.04.17 |
Swift를 사용하여 iOS에서 프로그래밍 방식으로 설정하는 방법 (0) | 2023.04.17 |
Javascript를 사용하여 HTML 테이블을 Excel로 내보내기 (0) | 2023.04.17 |
ASCII 파일 전체를 C++ std:: 문자열로 읽습니다. (0) | 2023.04.17 |