【发布时间】:2019-11-20 12:37:53
【问题描述】:
我正在尝试从名为__tests__ 的src 的任何子目录中删除所有.js 和.js.map 文件。
$ find . -path './src/**' -name __tests__ | # find subdirectories
> sed -E 's/([^ ]+__tests__)/\1\/*.js \1\/*.js.map/g' | # for each subdirectory, concat *.js and *.js.map
> xargs rm # remove files
这会失败并出现以下错误:
rm: cannot remove './src/game/__tests__/*.js': No such file or directory
rm: cannot remove './src/game/__tests__/*.js.map': No such file or directory
rm: cannot remove './src/helpers/__tests__/*.js': No such file or directory
rm: cannot remove './src/helpers/__tests__/*.js.map': No such file or directory
但是,如果我将 xargs rm 更改为 xargs echo rm,复制并粘贴输出并运行它,它就可以工作。
$ find . -path './src/**' -name __tests__ | sed -E 's/([^ ]+__tests__)/\1\/*.js \1\/*.js.map/g' |
> xargs echo rm # echo command to remove files
rm ./src/game/__tests__/*.js ./src/game/__tests__/*.js.map ./src/helpers/__tests__/*.js ./src/helpers/__tests__/*.js.map
$ rm ./src/game/__tests__/*.js ./src/game/__tests__/*.js.map ./src/helpers/__tests__/*.js ./src/helpers/__tests__/*.js.map
将我的 echo 输出包装在 $(...) 中并在前面添加 rm 会导致与以前相同的错误。
$ rm $(find . -path './src/**' -name __tests__ | sed -E 's/([^ ]+__tests__)/\1\/*.js \1\/*.js.map/g' | xargs echo rm
rm: cannot remove './src/game/__tests__/*.js': No such file or directory
rm: cannot remove './src/game/__tests__/*.js.map': No such file or directory
rm: cannot remove './src/helpers/__tests__/*.js': No such file or directory
rm: cannot remove './src/helpers/__tests__/*.js.map': No such file or directory
我做错了什么?
我怀疑这很重要,但我在 Windows 上使用 GitBash。
【问题讨论】:
-
您告诉
rm删除一个字面上称为*.js的文件。 -
哦,如何去掉它周围的
''? -
周围没有
'';没有什么可以删除的。 -
rm总是按字面意思解释它的参数。*扩展是由 shell 执行的,但你在这里直接从sed到rm。 -
你想要的是
rm ./src/**/__tests__/*.js{,.map}吗? (当然,需要启用globstar选项)。