Git递归mv文件

时间:2014-03-25 01:38:16

标签: git bash mv

我尝试将版本号添加到目录中的所有javascript文件中,以便我们的用户不会对文件进行更改。

如何在一个目录中移动多个目录中的所有Javascript文件?

使用示例文件结构:

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

我想执行类似git mv -r js/*.js js/*.1.js的操作,将.1附加到文件名中。显然,git mv的递归没有标志,所以我想知道我的选择是做什么类似的。

1 个答案:

答案 0 :(得分: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' _ {} +