디렉터리 이름을 바꾸면 네 번째와 여섯 번째 문자 뒤에 대시가 추가됩니다.

디렉터리 이름을 바꾸면 네 번째와 여섯 번째 문자 뒤에 대시가 추가됩니다.

네 번째와 여섯 번째 문자 뒤에 대시를 추가하여 몇 개의 디렉토리 이름을 바꾸려고 합니다. 나는 이 게시물을 읽었다.Bash에서 디렉토리만 반복하는 방법은 무엇입니까?대시를 삽입하려는 디렉토리를 성공적으로 반복할 수 있습니다. 그런데 이걸 보고 나면파일 이름을 바꾸면 네 번째와 여섯 번째 문자 뒤에 대시가 추가됩니다.디렉토리에 비슷한 구문을 사용할 수도 있지만 그렇게 한 후에는 그렇게 할 수 없다는 것을 깨달았습니다. 이것은 내 구문입니다.

for d in */ ; do
      mv “$d" “${d::4}-${d:4:2}-${d:6}"
done

SE 전체를 검색했는데 비슷한 게시물이 보이지 않았습니다. 이 질문에 대한 답변이 다른 곳에서 제공된다면 미리 사과드립니다.

또한 제공할 수 있는 도움에 미리 감사드립니다. 최고야, 존

답변1

사용진주의rename모든 디렉터리의 이름을 바꿉니다.

rename -n 's/^(.{4})(.{2})/${1}-${2}-/' */

-n테스트가 만족스러우면 제거하세요.

전임자:

$ mkdir foobarbase{a..c}
$ rename -n 's/(.{4}) # 1st capture group
               (.{2}) # 2nd capture group
              /${1}-${2}-/x' foobar*
rename(foobarbasea, foob-ar-basea)
rename(foobarbaseb, foob-ar-baseb)
rename(foobarbasec, foob-ar-basec)

코드를 유지하려면 ASCII 큰따옴표를 바꾸십시오."

답변2

문자를 다음과 같이 변경 했습니다 ".

for d in */ ; do
      mv "$d" "${d::4}-${d:4:2}-${d:6}"
done

내 디렉토리

#ls
fooobar1   fooobar2  fooobar4  fooobar6  fooobar8
fooobar10  fooobar3  fooobar5  fooobar7  fooobar9

그리고 실행한 후

#ls
fooo-ba-r10  fooo-ba-r3  fooo-ba-r5  fooo-ba-r7  fooo-ba-r9
fooo-ba-r1  fooo-ba-r2   fooo-ba-r4  fooo-ba-r6  fooo-ba-r8

코드는 모든 디렉터리와 파일의 이름을 변경하지만 디렉터리 이름만 변경하는 경우 다음 코드를 사용합니다.
find * -maxdepth 0 -type d  | while read d
do
      mv "$d" "${d::4}-${d:4:2}-${d:6}"
done
@ilkkachu 댓글 읽기

관련 정보