xargs touch 后跟第二条命令

xargs touch 后跟第二条命令

我从目录中随机选择要处理的文件,并希望对它们应用 touch 命令,以便知道最后一个被可视化的文件,然后应用可视化程序。如下所示:

while [ 1 ]; do ls | shuf | xargs "touch & vizprogram"; done

由于我正在手动检查这些数据集,我希望能够在循环的任何时候按“Esc”,以便我中断 vizprogram 并再次执行循环。然后,当我找到要跟踪的文件时,我想按 Ctrl+C 并执行 以ls -rt | tail -n 1获取我使用的最后一个文件的名称。我尝试使用 for 或 while 循环而不是xargs,但我无法在主循环上执行“Esc”。

有什么想法如何在 xargs 中执行“touch then vizprogram”?

答案1

如果vizprogram使用 ESC 退出则返回 true,使用 Ctrl-C 退出则返回 false,您可以执行以下操作:

while ls | shuf | parallel --halt 2 -j1 "touch {}; vizprogram {}"; do true; done

您可以通过以下方式轻松安装 GNU Parallel:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

观看 GNU Parallel 的介绍视频以了解更多信息: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

答案2

创建如下的 shell 脚本:

#!/usr/bin/env bash
while [ $# -gt 0 ]
do
    touch "$1"
    vizprogram "$1"
    shift
done

然后xargs执行它:

echo "file file2 file3" | xargs /path/to/script.sh

相关内容