2

Я случайным образом выбираю файлы из каталога, который хочу обработать, и хочу применить к ним сенсорную команду, чтобы я знал последний визуализированный файл, а затем применил программу визуализации. Что-то вроде этого:

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

Так как я вручную проверяю эти наборы данных, я хочу иметь возможность "выйти" из цикла в любой точке, чтобы я прерывал vizprogram и снова проходил через цикл. Затем, когда я нахожу файл, за которым хочу следовать, я хочу нажать Ctrl+C и выполнить команду ls -rt | tail -n 1 чтобы иметь имя последнего файла, который я использовал. Я попытался сделать это с помощью цикла for или while вместо xargs , но затем я не могу выполнить "Esc" в основном цикле.

Любые идеи, как сделать "Touch затем Vizprogram" в XARGS?

2 ответа2

2

Создайте скрипт оболочки, например:

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

Затем xargs выполнит это:

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

Если vizprogram возвращает true, если выход из ESC, и false, если выход из Ctrl-C, вы можете сделать:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .