Linux urldecode имя файла

Есть ли инструмент для urldecode имени файла и его замены?

Пример:

$ ls hello%20world.txt $ urldecode *.txt $ ls hello world.txt 

4 Solutions collect form web for “Linux urldecode имя файла”

Новое сообщение в блоге описывает это с помощью echo(1) и printf(1) .

 urldecode() { arg="$1" i="0" while [ "$i" -lt ${#arg} ]; do c0=${arg:$i:1} if [ "x$c0" = "x%" ]; then c1=${arg:$((i+1)):1} c2=${arg:$((i+2)):1} printf "\x$c1$c2" i=$((i+3)) else echo -n "$c0" i=$((i+1)) fi done } 

Sed и echo могут urldecode имя файла так:

 $ echo -e "$(echo hello%20world+ok | sed 's/+/ /g;s/%\(..\)/\\x\1/g;s/\\x\(2[Ff]\)/%\1/g')" hello world ok 

Мы хотим, чтобы это позволило превратить имена файлов в имена файлов, а не имена путей (т. Е. Мы не хотим добавлять косые черты), поэтому мы оставляем %2F один. (Чтобы быть более точным, мы \x2F обратно в %2F .)

 $ echo -e "$(echo cat+dog%20foo%21%22%23%24%25%26%27%28%29%2A%2B%2C%2D%2E%2Fbar | sed 's/+/ /g;s/%\(..\)/\\x\1/g;s/\\x\(2[Ff]\)/%\1/g')" cat dog foo!"#$%&'()*+,-.%2Fbar 

Чтобы фактически переименовать файлы в текущем каталоге:

 $ ls *.txt hello%20%20world++ok?.txt $ for f in *.txt; do > mv "$f" "$(echo -e "$(echo "$f" | sed 's/+/ /g;s/%\(..\)/\\x\1/g;s/\\x\(2[Ff]\)/%\1/g')")" > done $ ls *.txt hello world ok?.txt 

Если исходные (входные) имена файлов содержат обратную косую черту, они, вероятно, будут искажены.

Я думаю, что этот фрагмент Perl можно использовать в качестве основы для того, что вы ищете.

Введите оболочку (или добавьте в .bashrc):

 urldecode(){ mv $1 "`echo $1 | xargs python -c "import urllib, sys; print urllib.unquote(sys.argv[1])"`" } 

Применение:

 $ urldecode *.txt 

Протестировано в bash, zsh. Кредиты .

  • Как я могу настроить таргетинг иерархии каталогов с помощью программных ссылок в Linux?
  • Как я могу проверить, что занимает дисковое пространство в / tmp?
  • Как удалить очень большую папку (~ 40 ГБ) с большим количеством файлов в Linux
  • Удаление файлов, но дисковое пространство по-прежнему заполнено
  • Автоматически отвечать «Да» при использовании apt-get install
  • Какова цель файлов / etc / shadow и shadow cache в операционной системе Linux?
  • Почему эта команда отключает Linux
  • Как я могу отображать использование памяти для каждого процесса, если я делаю «ps -ef»?
  • Ls с каталогом путь показывает файлы, но ls с шаблоном файла нет?
  • VIMRC, SCREENRC, BASHRC, KSHRC и т. Д. Что означает «RC»?
  • Как искать рекурсивно для строки в linux?
  • Как определить, какой процесс открыт в Linux?
  • Interesting Posts
    Давайте будем гением компьютера.