파일 이름 앞뒤에 다른 마침표가 있는 한 파일 이름의 마침표를 하이픈으로 재귀적으로 변경하는 다음 명령이 있습니다.
find path/to/dir -depth -type f -name '*.*' -exec rename -n -d 's/(?<=.)\.(?=.*\.)/-/g' {} +
그러나 조정하려는 모든 파일 이름에서는 효율적으로 작동하지 않으며 다음 규칙에 따라 다시 작성해야 합니다.
- 이름 바꾸기는 숫자로 시작하는 파일 이름에만 발생합니다.
- 숨겨진 파일은 변경되지 않습니다.
- 각 파일 이름의 처음 두 마침표만 변경됩니다.
예를 들면: 동일 2020.12.06_name123.ext.xmp
하게 되고 2020-12-06_name123.ext.xmp
그대로 유지됩니다.name123.ext.xmp
그것을 처리하는 방법?
리눅스 민트 시나몬 21을 실행하세요
답변1
아마도 zsh
다음을 사용하고 수행할 수 있습니다.
autoload -Uz zmv
zmv -n '(**/)(<1900-2100>).(<1-12>).(<1-31>)([^0-9]*)(#q.)' '$1$2-$3-$4$5'
일치시키려는 항목을 명확히 해야 합니다. 여기서 파일 이름은 해당 범위의 YYYY.MM.DD 날짜로 시작됩니다.
( -n
드라이런의 경우. 실제 실행을 위해 제거하세요.)
1 기술적으로 이것은 또한 일치합니다 002023.1.012
. <x-y>
즉, 사이의 숫자를 나타내는 임의의 십진수 시퀀스의 일치입니다.엑스그리고와이.
답변2
awk
다음은 이름이 숫자로 시작하고 점의 위치가 고정되어 있으며 날짜와 나머지 사이의 구분 기호가 밑줄이라고 가정하는 예입니다 .
awk -F_ 'BEGIN {OFS="_"} /^[0-9]/ {a=gensub(".","-",5,$1);b=gensub(".","-",8,a);$1=b }1'
전체 텍스트는 다음과 같습니다 find
.
find -depth -type f -name '*.*" -exec awk -F_ 'BEGIN {OFS="_"} /^[0-9]/ {a=gensub(".","-",5,$1);b=gensub(".","-",8,a);$1=b }1' {} +