Linux urldecode имя файла

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

Пример:

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

  • Как удалить все, кроме 10 самых новых файлов в Linux?
  • Как я могу проверить, что занимает дисковое пространство в / tmp?
  • Как удалить очень большую папку (~ 40 ГБ) с большим количеством файлов в Linux
  • Узнайте, почему / как создается папка
  • Список подкаталогов на одном уровне вниз, которые не содержат определенного файла
  • Что такое команда Linux, чтобы узнать информацию об оборудовании?
  • Linux, найти все файлы, соответствующие шаблону и удалить
  • Удаление файлов, но дисковое пространство по-прежнему заполнено
  • 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. Кредиты .

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