2011-01-22 3 views
0

이 질문은 다른 사람들 사이에서 다소 독특합니다.
폴더 묶음이있는 디렉토리가 있고 각 단어를 구분하기 위해 마침표를 사용하여 이름이 지정됩니다.
다음과 같습니다 : foo.bar.2011.useless.words
마지막 두 단어는 항상 쓸모없는 단어이므로 두 번째 마침표부터 시작하여 자릅니다.
문구의 확실하지 ...
많은 감사bash 스크립트는 하나의 디렉토리에서 파일 이름을 자릅니다.

점 폴더 만 한 수준 깊은, 이그나시오의 대답과 함께 갈 경우

답변

1
for file in *.*.* 
do 
    mv "$file" "${file%.*.*}" 
done 
+0

하나의 작은 위의 의견에 질문에 대답 비평 :'*. *. * /'에있는'for file '을 사용하여 디렉토리에만 일치하는 패턴을 제한하려고합니다. 이제 당신이'this.is.a.file'와 일치하게됩니다. – SiegeX

+0

감사합니다. 혼란스러워하는 한가지 : "*. *. * 파일의 경우, 얼마나 많은". "파일이 실제로 예를 들어, 폴더 이름에 "."이 6 개 정도있는 경우? – fightermagethief

+0

@bboyreason'*. *. * '은 이름에 적어도 * 두 개의 점이있는 파일 또는 폴더와 일치합니다. Ignacio에 대한 제 코멘트에서 언급 한 바와 같이'*. *. * /'를 사용합니다. 따라서 파일 이름이 아니라 적어도 두 개의 점이있는 폴더와 일치하게됩니다. – SiegeX

0

. 그러나 이름을 바꿀 폴더가 /toplevel/subdir1/foo.bar.baz.blah/과 같은 하위 디렉토리에있는 경우 아래에서 내 find 명령을 사용해야합니다. Bash 4.x이없는 경우 shopt -s globstar 옵션을 사용할 수 있습니다. 당신은 변경하지 않고 드라이 실행을 할 수 있도록

find /top/level/dir -type d -name '*.*.*' -exec sh -c 'for arg; do echo mv "$arg" "${arg%.*.*}"; done' _ {} + 

는 내가 거기에 echo을 추가했다. 출력에 만족하면 echo을 제거하고 다시 실행하여 변경 사항을 영구적으로 유지하십시오. 당신은 기분 경우

가 뻔뻔하게, 유용한 도구에게 도움을 의심의 여지을 이그나시오의 PE

+0

감사를 훔쳐서 내 $tmp VAR을 제거 편집, 아마도 ... – fightermagethief

관련 문제