如何将文件列表输入bash脚本

我无法在bash shell中将大量文件名输入到命令中(对于Windows git的git,我认为是cygwin)。

这是基本命令,可以使用少量参数运行:git filter-branch -f --tree-filter 'rm -rf file1 directory2 file3 file4'但是,我有大约1500个文件名。

我尝试过:git filter-branch -f --tree-filter 'rm -rf file1 directory2... all 1500 names here',但出现错误:

  

/ mingw64 / bin / git:参数列表太长

我尝试使用for循环:git filter-branch -f --tree-filter 'for f in $(cat files.txt) ; do rm -fr "$f" ; done',这在循环中运行并出现错误:

  

cat:files.txt:没有这样的文件或目录

仅供参考-files.txt内容如下:

./file1 
./directory2 
./file3 
./file4

然后我尝试了git filter-branch -f --tree-filter < cat files.txtcat files.txt | git filter-branch -f --tree-filter,但是我收到有关语法不正确的错误-它显示了“帮助”对话框。例如:

  

用法:git filter-branch [--setup] [--subdirectory-filter   ] [--env-filter]           [--tree-filter] [--index-filter]           [--parent-filter] [--msg-filter]           [--commit-filter] [--tag-name-filter]           [ - 原版的 ]           [-d] [-f | --force] [--state-branch]           [-] [...]

然后我想也许我可以像这样将参数添加到文件中:git filter-branch -f

文件:

--tree-filter './file1 ./directory2 ./file3 ./file4'

但是我再次得到“帮助”对话框。

我敢肯定有办法做到这一点,但是我的unix-fu太弱了。请帮忙!


响应@ dash-o:

我尝试过此操作,但出现错误:

  

C:/ Program Files / Git / mingw64 / libexec / git-core \ git-filter-branch:评估:   第414行:寻找匹配的`''C:/ Program时出现意外的EOF   文件/ Git / mingw64 / libexec / git-core \ git-filter-branch:eval:第415行:   语法错误:文件意外结束

files.txt每行列出一个文件。但是,rm -rf要求它们在一行上并用空格分隔。

我试图将文件名放在一行上,但出现另一个错误:

  

C:/ Program Files / Git / mingw64 / libexec / git-core \ git-filter-branch:行   414:rm -rf .vs ./file1 ./directory2:找不到命令树过滤器   失败:'rm -rf ./file1 ./directory2'

也许单引号已被转义并且没有被包裹在rm命令周围?

woliufeiyu 回答:如何将文件列表输入bash脚本

尝试一下,只需确保您在files.txt所在的路径中,以避免出现“无此类文件或目录”错误:

for f in $(cat files.txt); do git filter-branch -f --tree-filter 'rm -rf '"$f"'' ; done
,

对于文件数量较多的情况,单独遍历每个文件可能会很耗时。对于这些情况,请考虑使用xargs功能将参数一起批处理(基于参数的最大数量,最大命令行大小等)。

xargs -L50 < files.txt  | xargs -I@ git filter-branch -f --tree-filter "'rm -rf @'"

第一个xargs纯粹用于安排块参数,每个参数50个文件。可以根据需要对其进行自定义以包括行大小限制。

第二个xargs将为每50个参数执行git filter。您可能需要处理引号,因为我没有能力在Windows上使用git测试命令。

本文链接:https://www.f2er.com/3145990.html

大家都在问