잘린 이름으로 디렉토리 이름 바꾸기

잘린 이름으로 디렉토리 이름 바꾸기

나는 여러 개의 하위 디렉터리를 가지고 있는데, 각 디렉터리의 이름 끝에 시간이 포함되어 있습니다. 이것을 삭제하고 싶습니다. 찾을 수 있는 단축키가 있나요?

.
├── ACRA
│   └── acra2017-12-25 16:01:57
├── Activiti
│   └── Activiti2017-05-02 17:15:37

도착하다

.
├── ACRA
│   └── acra2017-12-25
├── Activiti
│   └── Activiti2017-05-02

답변1

find . -type d -name '*[0-2][0-9]:[0-5][0-9]:[0-5][0-9]' -exec sh -c '
    for d; do mv -- "$d" "${d% *}"; done
' findsh {} +

실제로 스크립트를 실행하기 전에 echo와 사이에 추가하여 올바른 작업이 적용되는지 확인할 수 있습니다.domvmv

  • -type d: 디렉토리만 선택
  • -name '*[0-2][0-9]:[0-5][0-9]:[0-5][0-9]': 이름 끝에 시간이 있는 경우에만 일치하는 전역 패턴입니다.
  • for d; do mv -- "$d" "${d% *}"; done: 발견된 각 디렉터리에 대해 이 mv작업을 적용하고 이름을 바꿉니다. 파일 이름에서 ${d% *}마지막 공백 뒤의 모든 내용(및 포함)을 제거합니다.

답변2

findPerl 유틸리티 사용 rename:

find . -type d -name "* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]" \
  -exec rename -n 's/ \d{2}:\d{2}:\d{2}$//' {} \;

-n출력이 예상대로 나타나면 옵션을 제거하십시오.

관련 정보