디렉터리 및 하위 디렉터리 이름의 모든 점을 반복적으로 공백으로 바꿉니다.

디렉터리 및 하위 디렉터리 이름의 모든 점을 반복적으로 공백으로 바꿉니다.

Bash를 사용하여 디렉터리 이름과 하위 디렉터리의 모든 점을 공백으로 바꾸려고 합니다.

예: 디렉토리목차 1.3 될 것입니다목차 1 3

지금까지 내 스크립트는 다음과 같습니다.

#!/bin/bash    
for dir in *\ -\ *; do

      [[ -d "$dir" ]] || continue   # skip if not a directory
      sub="${dir#* - }"
      if [[ ! -e "$sub" ]]; then
        mv "$dir" "$sub"
        mv echo "$(echo "Result: ${dir%.*}" | sed 's/\./ /g').${dir##*.}"

      fi
done

답변1

사용 find:

find . -mindepth 1 -type d -name "*.*" -exec bash -c '
  for ((i=$#;i>0;i--)); do
    dir=${!i}
    newdir=$(dirname "$dir")/$(basename "$dir" | tr -s "." " ")
    if [ -e "$newdir" ]; then
      echo "skipping \"$dir\", \"$newdir\" already exists" >&2 
    else
      mv "$dir" "$newdir"
    fi
  done
' bash {} +

*.*패턴을 사용하여 현재 디렉토리의 모든 디렉토리 이름을 재귀적으로 찾고 -mindepth 1. 발견된 디렉터리 목록은 -execbash 스크립트로 전달되며, 여기서 해당 인수는 for 루프에서 역순으로 처리됩니다(더 깊은 수준의 하위 디렉터리가 먼저 표시됨).

새 디렉토리 이름은 dirname해당 합계를 기준으로 생성 됩니다 basename. 후자는 tr여러 점이 단일 공백 ​​문자로 바뀌는 곳에서 수정됩니다( -s여러 점을 여러 공백으로 바꾸려면 옵션을 제거하세요). 새 디렉토리 이름이 이미 존재하는 경우 오류 메시지를 인쇄하거나 이동하십시오.

관련 정보