Используя функцию >
перенаправления, вы можете отправить вывод любого сценария или команды в файл в любое место. По умолчанию файл создается в текущем рабочем каталоге, но при желании вы можете указать абсолютный или относительный путь к файлу:
/usr/local/bin/somescript.sh > /path/to/Documents/someprogram.log
Один трюк состоит в том, чтобы закодировать \ n
в base64 ... так что получается Cg ==
this you можно добавить к команде printf. В имени файла не может быть символа '\'. Так что, в конце концов, вы можете вернуть его обратно
find. -name "* _ *" -printf "% f \ 0Cg ==" | sed 's /_....-..- .. \. pdf // g' | xargs -0 -i echo "{}" | base64 -d | sed 's / \\ n / \ n / g'
Просто добавьте кодировку base64 новой строки ( Cg ==
) после каждого имени файла и передайте все это по конвейеру base64 -d
:
find . -name "*_*" -printf "%f\n" |
sed -n 's/_....-..-..\.pdf$/Cg==/p' |
base64 -d
С вашим подходом это будет должно быть что-то вроде:
find . -name "*_*" -printf "%f\0" |
sed -zn 's/_....-..-..\.pdf$//p' |
xargs -r0 sh -c '
for i do
echo "$i" | base64 -d
done' sh
, поскольку вам нужна оболочка для создания этих конвейеров. Но это означало бы запуск нескольких команд для каждого файла, что было бы довольно неэффективно.
У Bash есть отличный здесь -документ <<<
, который позволит вам передавать несколько строк с помощью xargs.
❯ echo -e "T0sK\nT0sK" | xargs -n1 bash -c 'base64 -d <<< $1' _
OK
OK