디렉터리 및 포함된 파일의 이름 변경

디렉터리 및 포함된 파일의 이름 변경

디렉터리에는 다음과 같은 이름의 하위 디렉터리가 여러 개 있습니다([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호출은 디렉터리 자체의 이름을 바꿉니다.

관련 정보