我从目录中随机选择要处理的文件,并希望对它们应用 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