Git递归mv文件

boz*_*doz 1 git bash mv

我正在尝试向目录中的所有 javascript 文件添加版本号,以便我们的用户不会缓存对文件的更改。

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

使用示例文件结构:

js/
--home/
----main.js
--apps/
----main.js
--handlers.js
--ajax.js
Run Code Online (Sandbox Code Playgroud)

我想做一些事情,比如git mv -r js/*.js js/*.1.js将 a 附加.1到文件名。显然,git mv 没有递归标志,所以我想知道我的选择是什么来做类似的事情。

koj*_*iro 5

Globstar (bash >=4)

shopt -s globstar # Set the SHell OPTion globstar
for f in **/*.js; do
  git mv "$f" "${f%.js}.$version.js"
done
Run Code Online (Sandbox Code Playgroud)

将所有内容移动到单个目录:

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
Run Code Online (Sandbox Code Playgroud)

您可以使用find,但它几乎相同,因此将其保存在需要 Bash 3 或 POSIX sh 可移植性的地方(例如 OS X)。

find . -iname '*.js' -exec sh -c 'for f; do
  git mv "$f" "${f%.js}.$version.js"
done' _ {} +
Run Code Online (Sandbox Code Playgroud)