2014-02-06 4 views
0

지정한 디렉토리를 통과하고 이름과 일치하는 폴더의 이름을 바꿀 스크립트를 만드는 데 도움이 필요합니다. 필자의 경우, 일부는 (/ Users /) .bak을 사용하여 제거하려고합니다.BASH를 사용하여 특정 확장명의 폴더 이름 바꾸기

제공 할 수있는 도움에 미리 감사드립니다. 폴더가 하지 빈, 당신이 rm -rf를 사용해야하는 경우 하위 디렉토리에 .bak 확장자를 가진 폴더를 제거하려면

+0

'find -type d -name '* (/ Users /) .bak'-delete'. – Wrikken

+0

'/ Users /'가 추가 되었습니까? 선행 경로의 일부라는 것을 의미합니까? –

+0

죄송합니다/Users가 디렉토리이고 .bak가 추가되었습니다. .bak 확장자를 제거하려고합니다. – user3089044

답변

0

라는 이름의 사용자

find /Users -type d -iname '*.bak' -print0 | xargs -0 rmdir 

대신

find /Users -type d -iname '*.bak' -print0 | xargs -0 rm -rf 

find라는 이름의 폴더 -type d을 찾습니다 어떻게 든 .bak 확장자 -iname '*.bak'으로 바꾸고이 이름을 xargs으로 가져 가면 na MES 그들을 제거는 rmdir 또는 rm -rf

업데이트 :

확장 (폴더의 이름을 변경)을 제거하려면, 당신은 넣어 기억 해요 while read 루프 mv

find /Users -type d -iname '*.bak' | while read d; do 
    t=$(echo $d | sed -e 's/\.bak$//') 
    mv $d $t 
done 
+0

디렉토리를 제거하고 싶지 않고 확장자 만 제거하려고합니다. 예 : test.bak는 – user3089044

+0

테스트로 이름이 변경되었습니다. 나는 단지/Users 만 필요하기 때문에 -maxdepth를 추가했다. 도와 주셔서 정말 감사합니다! – user3089044

1
find /Users -type d -iname '*.bak' | while read d; do 
    mv "$d" "${d%.bak}" 
done 

을 사용할 수 있습니다 이름에 공백이있는 경우 따옴표로 묶은 파일 이름.

${var%stuff} : 전면

이 두 숙어에서 글로브 stuff를 제거 루프에서 사용될 때, 어떤 Bourne 쉘의 변형이 매우 강력하고, 작업이다 (대시 : 결국
${var#stuff}에서 글로브 stuff를 제거 , bash, ksh 등)

관련 문제