fish로 여러 파일 이름 바꾸기

5300 단어 JadefishBashpug
fish는 보완효과가 좋기 때문에 사용하고 있습니다

jade → pug에 100 파일 정도의 이름을 바꿀 수있는 기회가있었습니다.
현재의 디렉토리로부터 서브 디렉토리까지 리네임하고 있는 것은 발견되지 않았기 때문에 투고합니다.

결론이 코드입니다.



rename.sh
for jadefilepath in **.jade
  mv "$jadefilepath" (echo "$jadefilepath" | sed '$s/\.jade$/.pug/')
end

추가입니다.



sed 사용하면 이해하기 어렵기 때문에 basename으로 문자열을 추출하는 방법도 써 둡니다.
이쪽이 정규 표현을 이스케이프하지 않기 때문에 아직 보기 쉬울지도 (.jade→.pug로 변환)

rename.sh
for filename in *.jade
  mv -v -- "$filename" (basename $filename .jade).pug
end 

참고 사이트

TL;DR



(뭐야 TL; DR은)
  • .jade → .pug로 확장자 바꾸기

  • 대상 독자


  • fish 사용
  • 지금있는 곳에서 아래쪽으로 걸어 바꿉니다

  • 출력



    이러한 디렉토리가 있다고 가정합니다
    ※tree 커맨드로 가시화하고 있습니다
    $ tree
    .
    ├── current.jade
    ├── dir1
    │   └── hoge1.jade
    └── dir2
        ├── dir3
        │   └── hoge3.jade
        ├── dir4
        │   └── dir6
        │       └── hoge6.jade
        ├── dir5
        │   └── hoge5.jade
        └── hoge2.jade
    
    6 directories, 6 files
    

    아까의 명령을 두드려,
    $ tree
    
    .
    ├── current.pug
    ├── dir1
    │   └── hoge1.pug
    └── dir2
        ├── dir3
        │   └── hoge3.pug
        ├── dir4
        │   └── dir6
        │       └── hoge6.pug
        ├── dir5
        │   └── hoge5.pug
        └── hoge2.pug
    
    6 directories, 6 files
    

    하위 디렉토리를 포함하여 확장자를 .jade → .pug로 변환 할 수있었습니다.

    입력



    자신이 아는 범위에서 코드를 설명합니다

    rename.sh
    for jadefilepath in **.jade
      mv "$jadefilepath" (echo "$jadefilepath" | sed '$s/\.jade$/.pug/')
    end
    
  • for 문에서 '.jade'가 발견되는 만큼 실행하고, 그 걸린 경로를 jadefilepath에 저장
  • mv에서 변수 $jadefilepath에 저장된 path를 mv 명령으로 이름 바꾸기
  • ()에서 sed 명령을 사용하여 .jade → .pug로 바꾸기 (여기를 참조했습니다 → How to rename file extensions in fish in a for loop?)

  • 첫 번째 줄 **.pug에서 현재 디렉토리에서 아래의 모든 하위 디렉토리를 와일드 카드로 끌어 당기는 것이 좋습니까

    현재 디렉토리 만 타겟팅하고 싶습니다.



    1행째의 **.jade*.jade로 해 별표를 하나 줄이면 OK였습니다

    fish 와일드 카드



    현재 디렉토리만의 검색은 별표 1개

    jadesearch.sh
    $ ls *.jade
    
    current.jade
    

    서브디렉토리 포함 검색은 별표 2개

    jadesearch.sh
    
    $ ls **.jade
    
    current.jade              dir1/hoge1.jade           dir2/dir3/hoge3.jade      dir2/dir4/dir6/hoge6.jade dir2/dir5/hoge5.jade      dir2/hoge2.jade
    

    참고


  • 전역! fish 쉘 보급 계획
  • How to rename file extensions in fish in a for loop?

  • 후기



    fish 보급 계획을 쓰고 있는 사람처럼 열중할 수 있는 언어 발견하고 싶다

    좋은 웹페이지 즐겨찾기