Преобразуйте путь к файлу к URI в ударе

Вообще говоря, при поиске файлов в каталоге и его подкаталогах рекурсивно использовать find.

Самый легкий способ указать диапазон дат с find должен создать файлы на границах диапазона и использовать -newer предикат.

touch -t 201112220000 start
touch -t 201112240000 stop
find . -newer start \! -newer stop
11
26.12.2012, 23:25
4 ответа

Один способ сделать это использует urlencode (установите его на Ubuntu через sudo apt-get install gridsite-clients).

urlencode -m "$filepath"

преобразует путь к URI. Часть "file://" URI будет не учтена, но можно легко добавить что через остроту удара:

uri=$(urlencode -m "$1"); echo "file://$uri"

или непосредственно

echo "file://$(urlencode -m "$1")"

или

echo -n file://; urlencode -m "$1"

Большое спасибо Michael Kjörling для ссылок!

5
27.01.2020, 19:59
  • 1
    не забывает кавычки! Вы, вероятно, хотите encodeduri=$(urlencode -m "$uri") с $uri в двойных кавычках! –  gniourf_gniourf 26.12.2012, 23:49
  • 2
    @gniourf_gniourf, Спасибо, измененный код соответственно. А-ч –  Glutanimate 26.12.2012, 23:55

Можно также использовать модуль Perl URI:: зарегистрируйте непосредственно из командной строки:

$ path="/home/MHC/directory with spaces and ümläuts"
$ echo $path | perl -MURI::file -e 'print URI::file->new(<STDIN>)."\n"'
file:///home/MHC/directory%20with%20spaces%20and%20%C3%BCml%C3%A4uts
$
4
27.01.2020, 19:59

На CentOS, никаких дополнительных зависимостей не требуется:

$ python -c "import urllib;print urllib.quote(raw_input())" <<< "$my_url"
1
27.01.2020, 19:59

Rockallite дал хороший ответ, но я не хотел каждый раз его печатать.

Для этого я создал повторно используемую функцию bash под названием «file2url». Чтобы узнать, где сохранять функции bash, взгляните на этот поток на SO .

file2url () {
    python -c "import sys, pathlib; print(pathlib.Path(input()).resolve().as_uri())" <<< $1
}

Предполагается, что у вас установлен python3 с именем «python».

1
02.02.2021, 06:50

Теги

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