나는 디렉토리를 가지고 있습니다 :
- 부자
- 비용
하지만 다음과 같은 이름을 가진 디렉터리도 있습니다.
- 입숨 - 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
명령은 변환을 수행합니다. 이 경우 첫 번째 이후의 모든 항목을 빈 문자열로 바꿉니다.