Как мне декодировать список имен файлов в кодировке base64?

Используя функцию > перенаправления, вы можете отправить вывод любого сценария или команды в файл в любое место. По умолчанию файл создается в текущем рабочем каталоге, но при желании вы можете указать абсолютный или относительный путь к файлу:

/usr/local/bin/somescript.sh > /path/to/Documents/someprogram.log
4
02.03.2016, 23:09
3 ответа

Один трюк состоит в том, чтобы закодировать \ 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'

2
27.01.2020, 20:50

Просто добавьте кодировку 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

, поскольку вам нужна оболочка для создания этих конвейеров. Но это означало бы запуск нескольких команд для каждого файла, что было бы довольно неэффективно.

7
27.01.2020, 20:50

У Bash есть отличный здесь -документ <<<, который позволит вам передавать несколько строк с помощью xargs.

❯ echo -e "T0sK\nT0sK" | xargs -n1 bash -c 'base64 -d <<< $1' _
OK
OK
1
17.07.2020, 06:00

Теги

Похожие вопросы