나는 여러 개의 하위 디렉터리를 가지고 있는데, 각 디렉터리의 이름 끝에 시간이 포함되어 있습니다. 이것을 삭제하고 싶습니다. 찾을 수 있는 단축키가 있나요?
.
├── 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
와 사이에 추가하여 올바른 작업이 적용되는지 확인할 수 있습니다.do
mv
mv
-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
find
Perl 유틸리티 사용 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
출력이 예상대로 나타나면 옵션을 제거하십시오.