다른 디렉터리를 기반으로 디렉터리 이름 만들기

다른 디렉터리를 기반으로 디렉터리 이름 만들기

나는 디렉토리를 가지고 있습니다 :

  • 부자
  • 비용

하지만 다음과 같은 이름을 가진 디렉터리도 있습니다.

  • 입숨 - Lorem
  • 도로 - 앉아

디렉터리에 하이픈이 없으면 무시해야 합니다. Mkdir Ipsum\ -\ *Ipsum;

가능합니까?

명확히 하기 위해 편집: 하이픈이 있는 디렉터리가 있는 경우 하이픈 앞 부분을 기반으로 새 디렉터리 이름을 만든 다음 하이픈 앞 부분을 포함하는 모든 디렉터리를 해당 새 디렉터리로 이동하고 싶습니다.

답변1

bash 하위 문자열 확장 기능을 사용할 수 있습니다.

${parameter%%word}는 일치하는 접미사 패턴을 제거합니다.

for f in *;do
    mv "$f" "${f%% -*}"
done

답변2

예, 가능합니다. 다음과 같은 코드를 fix-dashes.sh라는 파일에 넣으세요(저는 Mac OS를 사용하고 있지만 다른 Unices에서도 작동할 것입니다).

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
trap 'IFS=$SAVEIFS' 0
for i in $@
do
  echo Processing $i
  case $i in
    *-*)
      echo "'$i' has a dash"
      destname=$(echo "$i" | sed 's/ -.*//')
      echo mv "$i" $destname
      mv "$i" $destname
      ;;
  esac
done

그러면 디렉터리 bash fix-dash.sh */이름이 지정한 대로 변경됩니다. 슬래시는 디렉토리 이름만 얻을 수 있도록 중요합니다. 그렇지 않으면 대시가 있는 일반 파일이 영향을 받습니다.

`IFS에는 단어 구분 기호가 포함되어 있으며 파일 이름에 공백이 포함되어 있으므로 이를 조정해야 합니다.

case나는 명령줄에서 사용되는 RE를 모방하기 때문에 제한된 정규식 메커니즘을 사용하는 것을 좋아합니다 . bash이 경우 대시가 포함된 이름으로만 이름 바꾸기가 수행됩니다.

sed명령은 변환을 수행합니다. 이 경우 첫 번째 이후의 모든 항목을 빈 문자열로 바꿉니다.

관련 정보