![Linux 명령을 사용하여 .html 파일의 이름을 이전 디렉토리 이름으로 바꾸는 방법은 무엇입니까? [폐쇄]](https://linux55.com/image/114325/Linux%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20.html%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EC%9D%B4%EC%A0%84%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%20%EC%9D%B4%EB%A6%84%EC%9C%BC%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
이것은 내 디렉토리 구조이며 처음 두 디렉토리 이름만을 기준으로 지정된 디렉토리 rev 아래의 .html 파일 이름을 바꾸고 싶습니다. 이 작업을 수행하려면 명령을 어떻게 사용할 수 있습니까?
prj3
|-- blk1
| |-- blk1.config
| |-- blk1.html
| |-- checklist13
| | |-- checklist13.config
| | |-- checklist13.html
| | |-- checklist13.html~
| | `-- rev2
| | |-- rev2.config
| | `-- rev2.html
| |-- checklist14
| | |-- checklist14.config
| | |-- checklist14.html
| | |-- checklist14.html~
| | `-- rev5
| | |-- rev5.config
| | |-- rev5.html
| | `-- rev5.html~
예상 출력:
prj3
|-- blk1
| |-- blk1.config
| |-- blk1.html
| |-- checklist13
| | |-- checklist13.config
| | |-- checklist13.html
| | |-- checklist13.html~
| | `-- rev2
| | |-- rev2.config
| | `--checklist_13_rev2.html
| |-- checklist14
| | |-- checklist14.config
| | |-- checklist14.html
| | |-- checklist14.html~
| | `-- rev5
| | |-- rev5.config
| | |-- checklist_14_rev5.html
| | `-- rev5.html~
rev* 폴더 내의 모든 rev*.html 파일에 대해서만 동일한 예상 출력이 발생해야 합니다.
답변1
find
basename
다음은 , 및 의 조합을 사용하는 단일 라이너 입니다 dirname
.
find . -regex '.*/rev[0-9]+/rev[0-9]+.html' -exec sh -c 'mv -iv {} $(dirname {})/$(basename $(dirname $(dirname {})))_$(basename $(dirname {})).html' \;
기본적으로 find regex를 사용하여 rev#/rev#.html로 끝나는 경로를 얻고 이 조합을 사용하여 새 이름을 구성 dirname
하고 basename
상위 디렉터리와 상위 디렉터리의 상위 디렉터리 이름을 추출합니다.