디렉터리에는 다음과 같은 이름의 하위 디렉터리가 여러 개 있습니다([1-9]는 1부터 9까지를 의미함).
AA_BB_CC_river[1-9]
각 하위 디렉터리에는 디렉터리와 동일한 이름을 가진 파일(ascii)이 포함되어 있습니다. 여러 하위 디렉터리(및 그에 수반되는 파일)의 이름을 지정하는 데 실수를 저질렀습니다.
AA_BB_CC_rier[1-9]
하위 디렉토리 및 첨부 파일 이름 지정을 대체하는 방법은 무엇입니까 rier
?river
답변1
find
외부 프로그램을 허용하는 경우 다음을 사용할 수 있습니다 rename
.
find . -type f -name '*_rier*' -exec rename 's/rier/river/g' {} \+
find . -type d -name '*_rier*' -exec rename 's/rier/river/g' {} \+
외부 도구를 사용하고 싶지 않으면 다음을 사용할 수 있습니다.
# rename directories
for f in *rier*; do
mv -- "$f" "${f/rier/river}"
done
# rename files
for f in */*rier*; do
mv -- "$f" "${f/rier/river}"
done
먼저 디렉터리 이름을 바꾼 다음 파일 이름을 바꿉니다.
답변2
for file in $(find . -depth -name '*rier*'); do
mv $file $(echo $file | sed -e 's/rier/river/');
done
답변3
for
루프를 사용하십시오 .
for d in AA_BB_CC_rier*; do
[ -d "$d" ] && \
mv -v -- "$d/$d" "$d/${d/rier/river}" && \
mv -v -- "$d" "${d/rier/river}"
done
for
로 시작하는 모든 항목을 반복합니다AA_BB_CC_rier
.[ -d "$d" ]
디렉터리인지 확인하세요.mv
디렉터리의 파일 이름을 바꿉니다.- 두 번째
mv
호출은 디렉터리 자체의 이름을 바꿉니다.