네 번째와 여섯 번째 문자 뒤에 대시를 추가하여 몇 개의 디렉토리 이름을 바꾸려고 합니다. 나는 이 게시물을 읽었다.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