2014-03-25 4 views
1

디렉토리의 모든 자바 스크립트 파일에 버전 번호를 추가하여 파일 변경 사항을 사용자가 캐시하지 않도록하려고합니다.재귀 mv 파일

하나의 디렉토리에서 여러 디렉토리에있는 모든 자바 스크립트 파일을 어떻게 이동할 수 있습니까? 예제 파일 구조와

:

js/ 
--home/ 
----main.js 
--apps/ 
----main.js 
--handlers.js 
--ajax.js 

나는 파일 이름에 .1를 추가 할 git mv -r js/*.js js/*.1.js 그런 짓을하고 싶습니다. 분명히 git mv에 대한 재귀에 대한 플래그가 없으므로, 내 옵션이 비슷한 것을 할 것인지 궁금합니다.

+0

'git mv'에 재귀 플래그가 필요하지 않습니다. 'git mv'는 전혀 필요 없습니다. http://stackoverflow.com/questions/1094269/whats-the-purpose-of-git-mv –

답변

4

Globstar (bash는> = 4)

shopt -s globstar # Set the SHell OPTion globstar 
for f in **/*.js; do 
    git mv "$f" "${f%.js}.$version.js" 
done 

는 하나의 디렉토리에 모든 이동하려면 : 그래서,

for source in **/*.js; do 
    dest="${source%.js}.$version.js" 
    dest="$destination/${dest##*/}" # Strip off leading directories and prepend actual destination 
    git mv "$source" "$dest" 
done 

당신은 find을 사용할 수 있습니다 찾기,하지만 거의 동일합니다 Bash 3 또는 POSIX sh 이식성 (예 : OS X)이 필요한 곳에 이것을 저장하십시오.

find . -iname '*.js' -exec sh -c 'for f; do 
    git mv "$f" "${f%.js}.$version.js" 
done' _ {} + 
+0

'**. *. js'는 하나의 디렉토리로 이동합니까? 또한,'shopt'와'globstar'는 무엇입니까? – bozdoz

+0

@bozdoz'globstar'는 일반적인'*'의 재귀적인 버전이며'**'로 쓰여집니다. 'shopt -s'는 옵션을 true로 설정합니다 (기본값은 [tag : bash]에 거짓). – BroSlow

+0

@bozdoz가 모든 것을 하나의 목적지로 옮길 수있는 방법으로 업데이트되었습니다 - 처음에는 당신이 원했던 것이 확실하지 않았습니다. – kojiro