Я боролся с этим сценарием Bash около недели, пытаясь сделать то, что кажется самым простым. Я использую fswatch
для просмотра данной папки и создания имени файла для любого файла, добавленного к нему в качестве вывода. Этот вывод передается по каналу на xargs
, который затем запускает функцию с несколькими командами, которые используют имя файла, переданного fswatch
/xargs
с заменой переменной/аргумента.Bash: использование аргументов xargs/parallel в функции для переменной подстановки
#!/bin/bash
compressor() {
filepath="filepath"
mkdir -m 777 /Users/lr/Desktop/Watch/${filepath##/}_PROCESSING
mv ${filepath} /Users/lr/Desktop/Watch/${filepath##/}_PROCESSING
/Applications/Compressor.app/Contents/MacOS/Compressor -computergroup "This Computer" -jobpath /Users/lr/Desktop/Watch/${filepath##/}_PROCESSING/${filepath##/} -settingpath /Users/lr/Documents/CONVERTHQTEST.cmprstng -locationpath /Users/lr/Desktop/Watch/${filepath##/}_PROCESSING/${filepath%.*}.mp4
}
export -f compressor
/usr/local/Cellar/fswatch/1.8.0/bin/fswatch -0 -v --event Created --event MovedTo /Users/lr/Desktop/Watch |
xargs -0 -n1 -I'filepath' bash -c compressor 'filepath'
В простейшей конфигурации, где я по конвейеру вывод в xargs
и используется xargs
для запуска программы с помощью замены аргументов, все работало отлично. Затем я получил запрос на создание сценария для создания новой папки для каждого добавленного файла, переместите файл в эту папку и запустите команду.
С несколькими командами ничего не работает. Я не могу получить xargs
, чтобы передать аргументы функции, чтобы функция могла определять переменную с помощью аргумента и выполнять подстановку переменных в пути к файлу. Если я xargs -I'filepath' command 'filepath'
и затем filepath="filepath"
внутри функции, я в конечном итоге с mkdir
создать файл с именем filepath_PROCESSING
, а не аргумент от fswatch
замещено в.
Как я могу передать аргумент в функцию с помощью xargs
?
Я также попытался это: '#/bin/Баш /USR/местные/Подвал/fswatch/1 .8.0/bin/fswatch -0 -v --event Создано --event MovedTo/Пользователи/leftright/Рабочий стол/Часы | parallel -0 -n1 -q -x -v 'mkdir -m 777 /Users/leftright/Desktop/Watch/"{/.}"_PROCESSING/ \; mv "{}" /Users/leftright/Desktop/Watch/"{/.}"_PROCESSING/ \; /Applications/Compressor.app/Contents/MacOS/Compressor -computergroup "Этот компьютер" -jobpath /Users/leftright/Desktop/Watch/"{/.}"_PROCESSING/"{/} "-settingpath/Users/leftright/Documents /CONVERTHQTEST.cmprstng -locationpath /Users/leftright/Desktop/Watch/"{/.}"_PROCESSING/"{/.}".mp4 \; '' – Adam
Очевидно, что это не очень читаемо; если это важно для вопроса, оно должно быть добавлено посредством редактирования, чтобы другие могли его прочитать. – miken32