попробуйте:
:g/^\d/,/^\d/-1j
и проигнорируйте сообщение об ошибке E16: Недопустимый диапазон
Только необходимо изменить один символ в команде:
find * -type l -name '*.h' -exec ln -s /sourcedir/{} /destinationdir/{} \;
# ^
Используйте стандартный синтаксис, как:
S=/sourcedir D=/destdir find . -type l -name '*.h' -exec sh -c '
for i do
ln -s -- "$S${i#.}" "$D/$i"
done' sh {} +
Если Вы хотите использовать GNUisms, Вы могли бы сделать:
find . -type l -name '*.h' -printf '/sourcedir/%P\0/destdir/%P\0' |
xargs -r0n2 ln -s
Или если /sourcedir
текущий каталог:
find "$PWD" -type l -name '*.h' -printf '%p\0/destdir/%P\0' |
xargs -r0n2 ln -s
find
распечатает имена относительно путей, которые Вы обеспечиваете как аргументы. В этом случае путь .
, таким образом, все имена начнутся ./
. Для получения полных путей необходимо обеспечить полный путь, как введено:
find "$PWD" -type l -name '*.h'
Эта команда использует $PWD
переменная среды, которая содержит полный путь текущего рабочего каталога, таким образом, это должно сохранить значение Вашей исходной команды.
$PWD
от места назначения ln
команда. положительная сторона
– Stéphane Chazelas
12.04.2013, 14:44
find. -type l -name '*.h' -print0 | cut -z -c3- \
| xargs -0 -I '{}' ln -s '/sourcedir/{}' '/destinationdir/{}'
-print0
вывести полное имя файла на стандартный вывод, за которым следует null
персонаж. man cut
-удалить разделы из каждой строки файлов
-z
разделитель строк NUL
, а не новая строка. -c
выберите только эти символы. N-
от N-го байта, символа или поля, считая от 1, до конца строки. man xargs
-создавать и выполнять командные строки из стандартного ввода.
xargs [options] [command [initial-arguments]]
-0
Элементы ввода заканчиваются символом null
вместо пробела, а кавычки и обратная косая черта не специальные (берется каждый символ буквально ). -I replace-str
Замените вхождения replace-str
в initial-arguments
на имена считываются со стандартного ввода. Кроме того, пробелы без кавычек не заканчиваются входные элементы; вместо этого разделителем является символ новой строки. Подразумевается -L 1
. -L max-lines
Используйте не более max-lines
непустых строк ввода на командную строку.
!
,(
или)
или что-либо запускающееся с a-
в текущем каталоге. Это также пропустит скрытые файлы и директоров в текущем каталоге. – Stéphane Chazelas 12.04.2013, 16:07.h
в моих системах (ubuntu Linux). – Anthon 12.04.2013, 16:17