단일 unix 명령에서 접두사를 사용하여 폴더의 모든 파일 이름 짓고
접두사 "Unix_"를 사용하여 폴더 내의 모든 파일 이름을 바꿉니다. 즉, 폴더에 a.txt 및 b.pdf 파일이 두 개 안전한 가정하면 둘 다 단일 명령에서 Unix_a.txt 및 Unix_b.pdf로 이름을 바꿔야합니다.
파일 이름에 whitepace 가없고 하위 디렉토리가없는 경우 간단한 for
루프를 사용할 수 있습니다 .
$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done
확장 된 rename
명령 (perl 펼쳐보기)을 사용하십시오. 모든 유닉스에서 바로 사용할 수있는 것입니다 (예 : OS X에는 rename
.
debian-administration.org의 개요 :
파일 이름에 공백이 포함되어 있으면 더 부인 find
Linux에서는 다음이 작동합니다.
$ find . -type f -name '*' -printf "echo mv '%h/%f' '%h/Unix_%f\n'" | sh
-printf
불행히도 BSD 시스템에는 옵션 이 없습니다 . 그러나 GNU findutils 는 (예 :를 사용하는 Mac OS X brew install findutils
) 일 것입니다.
$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh
파일이있는 폴더 에서 rename
명령 을 시도하십시오 .
rename 's/^/Unix_/' *
rename ( sed s 명령 ) 의 인수 는 regex ^ 를 Unix_ 로 대체 함을 나타냅니다 . 캐럿 (^)은 줄의 시작 을 의미하는 특수 문자입니다 .
나는 이것이 당신이 찾고있는 생각합니다.
ls | xargs -I {} mv {} Unix_{}
예, 그것은 간단하고 우아하며 강력하며 단호한 일행입니다. 페이지에서 더 자세한 소개를 얻을 수 있습니다. 파일 및 디렉터리 이름 (접두사 추가)
나는 최근에 이와 같은 상황에 직면하고 더 쉬운 내장 솔루션을 찾았습니다. 다른 사람들이 해결책을 찾는 데 도움이 될 수 있도록 여기에서 공유하고 있습니다.
OS X Yosemite를 통해 Apple은 일괄 이름 변경 기능을 Finder에 직접 통합했습니다. 자세한 정보는 여기에서 확인할 수 있습니다 . 아래 단계도 복사했습니다.
여러 항목 이름
항목을 선택한 다음 항목 중 하나를 Control- 클릭하십시오.
바로 가기 메뉴에서 항목 이름을 선택합니다.
폴더 항목 이름 이름 짓는 팝업 메뉴에서 이름을 텍스트를 대치하거나 이름에 텍스트를 추가하거나 이름 형식을 변경하도록 선택합니다.
텍스트 검색어 : 찾기 필드에 제거 할 텍스트를 입력 한 다음 "바꿀 내용"필드에 추가하려는 텍스트를 입력하십시오.
텍스트 추가 : 필드에 추가 할 텍스트를 입력 한 다음 현재 이름 앞이나 텍스트를 추가 할 선택하십시오.
형식 : 파일의 이름 형식을 선택한 다음 색인, 카운터 또는 날짜를 이름 앞뒤에 배치 할 선택하십시오. 사용자 정의 형식 필드에 이름을 입력하십시오. 다음 번호를 입력하십시오.
이름을 클릭합니다.
파일에 텍스트 확장을 사용할 수있는 것보다 일반적인 패턴이있는 경우 텍스트 추가도 작업을 수행합니다.
-i
대신 사용할 수 있습니다.-I {}
ls | xargs -i mv {} unix_{}
이것은 또한 완벽하게 작동합니다.
ls
-디렉토리의 모든 파일을 준비합니다.xargs
--i
옵션으로 인해 모든 파일을 한 줄씩 허용{}
모든 파일의 자리 표시 자입니다.xargs
입력으로 인수를 두 개 이상 가져와야 합니다.
awk 사용 :
ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh
공백이있는 항목 작동 작동하고 디렉토리를 무시합니다.
for f in *; do [[ -f "$f" ]] && mv "$f" "unix_$f"; done
로 RNM (당신은 그것을 설치해야합니다) :
rnm -ns 'Unix_/fn/' *
또는
rnm -rs '/^/Unix_/' *
추신 : 저는이 도구의 저자입니다.
상태 :
우리는 certificate.key
certificate.crt
안에/user/ssl/
로 시작하는 모든 이름 certificate
을certificate_OLD
우리는 이제 내부에 있습니다. /user
다음을 먼저 사용하여 드라 이런 먼저 수행합니다 -n
.
rename -n "s/certificate/certificate_old/" ./ssl/*
다음을 반환합니다.
rename(./ssl/certificate.crt, ./ssl/certificate_OLD.crt) rename(./ssl/certificate.key, ./ssl/certificate_OLD.key)
파일은 변경되지 않았습니다. 이것은 단지 테스트 실행 일뿐입니다.
해결책 :
테스트 결과에 만족하면 실제 실행 :
rename "s/certificate/certificate_OLD/" ./ssl/*
의미 :
` "s / SOMETHING / SOMETING_ELSE"경로 / 파일 이름
팁 :
이미 경로에 권한 다음과 같이 실행하십시오.
rename "s/certificate/certificate_OLD/" *
로 시작하는 하위 디렉토리에서 수행 또는 ss
이를 수행하려면 다음 을 수행하십시오.
rename -n "s/certificat/certificate_old/" ./ss*/*
다음을 수행 할 수도 있습니다.
rename -n "s/certi*/certificate_old/" ./ss*/*
로 시작 certi
하는 하위 디렉토리에서로 시작하는 모든 이름을 바꿉니다 ss
.
하늘이 한계입니다.
정규식을 가지고 놀며 -n
.
일치하는 폴더 이름이 변경 될 수도 있습니다. cd
디렉토리에 더 잘 내용이 있습니다. 자신의 위험 부담으로 사용하십시오.
'ProgramingTip' 카테고리의 다른 글
주어진 배경색에 수준 텍스트 전경색 (0) | 2020.10.26 |
---|---|
Windows Form이 이미 있는지 확인하고 열려있는 경우 닫는 방법은 무엇입니까? (0) | 2020.10.26 |
지시문에 양식 전달 (0) | 2020.10.25 |
오류 : 데이터 경로“.builders [ 'app-shell']”에는 필수 속성 'class'가 있어야합니다. (0) | 2020.10.25 |
CodeIgniter로 MySQL 쿼리, 필드가 NULL 인 행 선택 (0) | 2020.10.25 |