(.filename) 파일 이름을 원래 이름으로 바꾸기

(.filename) 파일 이름을 원래 이름으로 바꾸기

을(를) 통해 변경한 내용을 되돌리려고 합니다 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

관련 정보