Описание тега sugar
Экспорт д
, то он будет доступен в вашем Баш
встроенные скрипты. Вам также не нужно колотить
во все здесь. Ваш (надеюсь стройнее/быстрее) ВГ
будет делать так же. Кроме того, вам не нужно запустить один снаряд в файл. Вы можете передать файлы на свой встроенный скрипт со -продюсером УМК {} +
вариант:
Д=в/tmp/фу
экспорт д
найти "$д" -тип F -exec для Ш-с '
для файл Сделать
относительный=${файл#"$д/"}
маршрутизатор dir=${файл%/*}
relative_dir=${относительный%/*}
relative_dir=${relative_dir:-.}
функции printf "%10С: %з\п" полный "$файл" \
относительно "$родственника" \
реж "$Дир" \
reldir "$relative_dir"
сделано' ш {} +
Что дает:
полный: /tmp/foo/bar/can/haz/bzr.txt
относительные: bar/can/haz/bzr.txt
реж: каталог /tmp с именем/foo/бар/может/ХАЗ
reldir: бар/может/ХАЗ
Но если вам нужен только относительный путь, он может быть проще просто сделать:
(кд -П -- "$Д" && найти . -старпома ш-C 'для файла...' ш {} +)
Что бы также сделать команду аргументов, переданных Ш.
короче, так позволит найти
, чтобы передать несколько аргументов для Рыб
.
Обратите внимание, что нет ничего ГНУ-конкретно найти
команду, ни меня. Это должно работать в любой POSIX-совместимая найти
реализацию не только в GNU одного. Единственный не-POSIX участие в вашем вопросе, очевидно, Баш
и ${1:смещение}
оператора, который Korn-оболочки оператора, а не в POSIX ш
.
Для рекурсивного поиска файлов, которое позволяет указать тип файла, см. Также ЗШ
:
(кд -П -- "$Д" &&
для файл (**/*(НД.)) {
файл dir=$: ч
функции printf '%10С: %относительной файл\Н $reldir $Дир
})
Выше .
эквивалентен найти
с -тип F
(только обычные файлы), а д
- Это также скрыто, Как найти
действительно.
Как Примечание стороны, в общем случае:
С=$А$Б; Д=${С:${#а}}
[ "$б" = "$д" ] && Эхо да
Не гарантированно выведите "Yes", потому что ${#ВАР}
и ${Вар:офсетная}
операторы работают с символов, а не байт.
Например, в кодировке UTF-8 локаль, это не выход да с этими значениями А
и Б
:
а=$'Ст xc3\' б=$'\xa9phane'
С теми, с
будет содержать мое имя (Стефан
) долларов
содержится половина é
характер и $Б
вторая половина, ${#а}
будет 3
(2 персонажа и 1 байт не образуют допустимый характер, но все равно засчитывается).
Так что $Д
будет Стефан
, а не $'\xa9phane'
.
В конкретном случае д=$а/$б
хоть, что это должно быть ОК, а не набор символов, как правило, доступны в системе районов имели бы характер другой, чем /
, содержащий кодирование /
.