通过xargs传递路径到`tag`命令行工具

问题描述

tag一个命令行可执行文件,允许macOS用户文件添加标签”。

tag -a | --add <tags> <path>... Add tags to file

我正在尝试通过管道传输文本文档中的文件列表,但几天失败后,语法急需帮助。描述页面上的唯一线索是:

如果您打算通过xargs传递标记输出,则可能需要 分别使用-0选项。

我尝试了几十个命令:xargs,gnu-xargs,for,while,但是无法获得将标签添加到列表中文件功能。研究网络后,我认为行尾可能存在问题。

我安装了dos2unix并在文件上运行它来解决可能的行尾问题,但似乎并不能解决任何问题。

如果您cd进入要标记文件目录,则不必使用文件的完整路径。

$ gxargs -0 -t --arg-file="/Users/john/Desktop/diffremove.txt" | tag -0 -a red

echo '13.Hours.The.Secret.soldiers.of.Benghazi.2016.1080p.BluRay.x265'$'\n''1941.1979.DC.1080p.BluRay.x265'$'\n'...

不了解xargs如何通过行,我认为我需要在命令后的位置放置一个变量,以查找文件tag -0 -a red <variable here>

我尝试过: $ for i in $(/Users/john/Desktop/diffremove.txt) do `tag -a red "$1"`

我安装了gnu xargs,并尝试了此命令。

$ </Users/john/Desktop/diffremove.txt gxargs -0 sh -c 'for arg do tag -0 -a red "$arg"'

编辑: 尝试使用此命令不会导致任何错误,但不会对文件标签

$ </Users/john/Desktop/diffremove.txt xargs -0 sh -c 'for arg do `tag -0 -a red '$arg'`;done'

解决方法

尝试一下

xargs -d '\n' -a /Users/john/Desktop/diffremove.txt -I % tag -a red %

这里,我们使用xargs来读取文件(使用-a),使用字符串替换为(使用%)并执行命令 tag -a red {filename} 。您可能需要添加 -d'\ n'(将delimeter设置为换行符)以分割字符串。

但是,读取和处理文件行的经典方法是使用Shell内置命令 read

$ while IFS= read -r p; do tag -a red $p; done < /Users/john/Desktop/diffremove.txt

,如果文件中没有空格,则可以跳过 IFS = 部分。