파일 이름을 바꾸고 상위 디렉터리 이름을 파일 이름에 추가하시겠습니까?

파일 이름을 바꾸고 상위 디렉터리 이름을 파일 이름에 추가하시겠습니까?

파일 이름을 바꾸고 상위 디렉토리 이름을 파일에 추가하려고 합니다(그리고 "Photos"라는 새 폴더로 이동합니다).

나는 이것을하려고 노력해 왔습니다.이름을 바꿔라그리고밀리미터파, 그러나 아래 예에서 디렉터리 A에 있을 때 이 작업을 수행하는 데 문제가 있습니다.

$ pwd
/A
$ tree
.
├── 1.jpg
├── 2.jpg
└── 3.jpg

그러나 폴더 계층 구조의 한 수준 위에서 이름 바꾸기를 실행하면 제대로 작동합니다.

$ pwd
/
$ tree
.
└── A
    ├── 1.jpg
    ├── 2.jpg
    └── 3.jpg

$ rename 's|(.*)/(.*)|$1/Photos/$1 - $2|' */*.jpg -p
$ tree
.
└── A
    └── Photos
        ├── A\ -\ 1.jpg
        ├── A\ -\ 2.jpg
        └── A\ -\ 3.jpg

예제에서 "A" 디렉터리에 있을 때 이를 어떻게 달성할 수 있습니까?

답변1

rename글쎄, 이것은 내가 가지고 있는 것보다 더 이국적이므로 먼저 sed를 사용해 보십시오.

Dir=$(basename "$PWD")
mkdir -p Photos
ls *.jpg|sed 's|\(.*\)|mv "\1" "Photos/'"$Dir"' - \1"|'    |sh

나는 이것이 다음과 같이 이름을 바꾸는 것으로 해석될 것이라고 생각합니다.

Dir=$(basename "$PWD")
rename 's|(.*)|Photos/'"$Dir"' - $1|' *.jpg -p

답변2

확장됨앙드레 보드의 답변. 나는 또한 rename이 명령으로 몇 가지 추가 실험을 수행했습니다. 네 가지 변형 모두 작동하며 아마도 더 깔끔하게 수행될 수 있습니다. 나는 AndreBeaud가 작은 eval따옴표를 사용하지 않고 대신 작은 따옴표를 사용하여 문자열을 연결했다는 것을 알았습니다. 편리한.

  1. 짧지만 읽기가 조금 어렵습니다.

    rename 's|.*/(.*)/(.*)|Photos/$1 - $2|' `pwd`/*.jpg --make-dirs
    
  2. 교체 섹션의 폴더 이름은 읽기 더 쉽습니다.

    eval "rename 's|(.*)|Photos/$(basename `"pwd"`) - \$1|' *.jpg --make-dirs"
    
  3. 먼저 변수를 만듭니다. 이 경우에는 한 번만 사용되므로 중요하지 않습니다. 따라하기 쉽습니다.

    Dir=$(basename `"pwd"`); eval "rename 's|(.*)|Photos/$Dir - \$1|' *.jpg --make-dirs"
    
  4. 변수가 먼저 나오는데 검색 부분에 폴더 이름이 있어서 굉장히 지저분합니다.

    Dir=$(basename `"pwd"`); rename 's|.*/(.*)/(.*)|Photos/$1 - $2|' ../$Dir/*.jpg --make-dirs
    

AndreBeaud와 내 버전을 결합하면 다음과 같은 짧은 버전이 됩니다.

rename 's|(.*)|Photos/'"$(basename "$PWD")"' - $1|' *.jpg --make-dirs

관련 정보