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. Кредиты .

  • Почему меньше, когда у вас может быть больше? (Пейджеры на * Nix)
  • Резервное копирование каталога программирования
  • Что такое .Trash и .Trash-1000?
  • Сила сигнала регистрации в журналах маршрутизатора
  • Как удалить повторяющиеся файлы через отдельные деревья каталогов?
  • Как определить, какой процесс открыт в Linux?
  • Linux: Запомнить путь к USB-устройству
  • ./configure: строка 2178 разрешено config.log
  • Как я могу настроить таргетинг иерархии каталогов с помощью программных ссылок в Linux?
  • Какова цель файлов / etc / shadow и shadow cache в операционной системе Linux?
  • Перемещение с Vista на Linux
  • Как создать случайный файл .txt (текст, читаемый человеком, такой как ascii) в linux
  • Interesting Posts

    Есть ли редактор тегов ID3 ​​для iTunes на OS X?

    Доступ к Windows из Linux / Mac по имени с использованием TCP / IP

    Найти файлы> 0 байт в длину, которые состоят только из NUL в Debian / Ubuntu

    Копирование текста с YouTube в буфер обмена вводит тире?

    Можно ли определить, какая версия Windows XP поставляется с лицензионным ключом?

    Есть ли хорошие конвертеры wma для mp3?

    Что вы вкладываете в набор инструментов для ремонта компьютеров?

    (Reverse-i-search) в Bash

    Лучший (желательно бесплатный) инструмент для удаления удаленных файлов в файловой системе NTFS

    Приложение для мониторинга всех приложений, использующих Интернет в Mac OS X

    Левое поведение проводника Windows в Windows 7

    Альтернатива iTunes для Linux?

    Как запустить программу с аргументами командной строки в Windows 'cmd с командой' start '?

    Доступная память отличается несколькими гигабайтами от того, что установлено

    Как отключить переключатель раскладки клавиатуры Ctrl + Shift в Windows 8?

    Давайте будем гением компьютера.