을(를) 통해 변경한 내용을 되돌리려고 합니다 rename
.
하위 폴더의 파일 이름을 바꾼 다음 아무 생각 없이 다음을 ..
사용하여 이름에서 파일을 지우려고 했습니다.
rename "s/.././" *
이제 각 파일 이름의 첫 글자 2개가 다음으로 변경된 600개 파일의 폴더가 있습니다..zzyGir*
"."를 변경할 수 있는 방법이 있나요? 전체 파일을 잃지 않고 각 파일 이름의 첫 글자로 돌아가시겠습니까?
나는 다음과 같이 운이 좋지 않은 다양한 것을 시도했습니다.
rename "s/./Di/; *
나는 한 번에 하나의 파일을 사용하는 솔루션에도 개방적이며 주로 파일 손실을 방지하려고 노력하고 있습니다.
답변1
처음 두 글자는 역사입니다. 그들을 되돌릴 기회는 없습니다. 그러나 .
아래 절차에 따라 파일 이름을 바꾸어 선행 부분을 제거할 수 있습니다.
bash
터미널에 꼭 있어야합니다
bash
잘못된 파일 이름으로 폴더로 이동하십시오.
shopt -s dotglob
rename -n 's/^\./Di/' *
모두 괜찮아 보이면
rename 's/^\./Di/' *
와 끝내다
shopt -u dotglob
설명
rename -n "s/^\./Di/" *
-n
조치 없음: 이름을 바꿀 파일 이름을 인쇄하지만 이름을 바꾸지는 않습니다.
/^\./
^
문자열의 시작 부분에 위치를 주장\.
.
문자 그대로 문자와 일치합니다 .
shopt -s dotglob
&shopt -u dotglob
shopt
shopt [-pqsu] [-o] [optname …]
선택적 쉘 동작을 제어하는 설정 값을 전환합니다.
-s
각 optname을 활성화(설정)합니다.
-u
각 optname을 비활성화(설정 해제)합니다.
dotglob
설정된 경우 Bash는
.
파일 이름 확장 결과에 a로 시작하는 파일 이름을 포함합니다.
예
$ ls -oag
total 88
drwxrwxr-x 2 4096 Jul 17 17:16 .
drwxr-xr-x 226 86016 Jul 17 17:13 ..
-rw-rw-r-- 1 0 Jul 17 17:16 .foo
$ rename "s/^\./Di/" *
$ ls -oag
total 88
drwxrwxr-x 2 4096 Jul 17 17:16 .
drwxr-xr-x 226 86016 Jul 17 17:13 ..
-rw-rw-r-- 1 0 Jul 17 17:16 Difoo
잘 모르겠습니다. 이게 무슨 말씀이신가요?
"."를 변경할 수 있는 방법이 있나요? 각 파일 이름의 첫 글자로 돌아가기
이런 뜻인가요?
.zzyGir
->zzzzGir
그렇다면 bash에서 다음 명령을 사용하십시오.
shopt -s dotglob
rename -n 's/^\.(..)(.*)/$1$1$2/' *
결과를 확인하고 다음으로 이름을 바꿉니다.
rename 's/^\.(..)(.*)/$1$1$2/' *
그리고 마침내 다시
shopt -s dotglob
답변2
제가 알기로는 아래와 같은 파일이 포함된 폴더가 있습니다.
ls -la
drwxrwxr-x 2 ron ron 4096 Jul 17 20:50 .
drwxrwxr-x 3 ron ron 4096 Jul 17 20:47 ..
-rw-rw-r-- 1 ron ron 0 Jul 17 20:47 .abc
-rw-rw-r-- 1 ron ron 0 Jul 17 20:47 .Gyr
-rw-rw-r-- 1 ron ron 0 Jul 17 20:47 .hig123
-rw-rw-r-- 1 ron ron 0 Jul 17 20:47 .zyz
.
모든 파일 이름을 제거하여 다음과 같이 만들고 싶습니다 .
abc
Gyr
hig123
zyz
find
이를 위해 다음을 사용할 수 있습니다 rename
.
find . ! -path . -type f -name ".*" -exec rename -n "s/.\/.//" {} \;
위 명령(예: -n
)은 시험 실행입니다.
find . ! -path . -type f -name ".*" -exec rename -n "s/.\/.//" {} \;
rename(./.zyz, zyz)
rename(./.abc, abc)
rename(./.Gyr, Gyr)
rename(./.hig123, hig123)
-n
실제로 파일 이름을 변경 하지 않고 실행하십시오 .
find . ! -path . -type f -name ".*" -exec rename "s/.\/.//" {} \;
ls -la
total 8
drwxrwxr-x 2 ron ron 4096 Jul 17 20:59 .
drwxrwxr-x 3 ron ron 4096 Jul 17 20:47 ..
-rw-rw-r-- 1 ron ron 0 Jul 17 20:47 abc
-rw-rw-r-- 1 ron ron 0 Jul 17 20:47 Gyr
-rw-rw-r-- 1 ron ron 0 Jul 17 20:47 hig123
-rw-rw-r-- 1 ron ron 0 Jul 17 20:47 zyz