Linux 명령을 사용하여 .html 파일의 이름을 이전 디렉토리 이름으로 바꾸는 방법은 무엇입니까? [폐쇄]

Linux 명령을 사용하여 .html 파일의 이름을 이전 디렉토리 이름으로 바꾸는 방법은 무엇입니까? [폐쇄]

이것은 내 디렉토리 구조이며 처음 두 디렉토리 이름만을 기준으로 지정된 디렉토리 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

findbasename다음은 , 및 의 조합을 사용하는 단일 라이너 입니다 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상위 디렉터리와 상위 디렉터리의 상위 디렉터리 이름을 추출합니다.

관련 정보