Я пытаюсь использовать, находят для списка директоров с определенным файлом внутри, но у моих директоров есть пробелы, таким образом, я не нашел решение.
Принятие я действительно понимаю Ваш вопрос, имейте Вас попробованный:
find / -name "*what*" -exec dirname {} \;
Это работает на меня, даже если мои каталоги имеют пробелы:
root:~# find / -name "*what*" -exec dirname {} \;
/usr/share/man/id/man1
...
...
/usr/share/man/ja/man1
/usr/share/man/it/man1
/usr/share/man/man1
/usr/bin
/root/This is a Spaced Dir
Это - от мягкой фетровой шляпы .bashrc файл:
ff () {
find . -name "*$@*" -print;
}
Добавьте это к Вашему .bashrc
и затем повторно инициализируйте свою оболочку удара
теперь можно использовать ff <whatever > \ <whatever>
\
escape-последовательность должна выйти из специальных символов.
POSIX диктует довольно слабое find
(серьезно, это даже не имеет-print0). Аналогично, xargs не будет иметь -0
опция и IEEE 1003.1-2008 рассматривают xargs -I {}
быть Системным расширением Интерфейса X/Open (которым и объявляет, что строка заменяет с аргументами, и преобразовывает xargs в использование новых строк для разделителей входного параметра). Таким образом принятие Вас на самом деле хочет сделать что-то с путями кроме распечатывания их и если можно только использовать основной POSIX, необходимо будет выйти из пробелов в строках прежде, чем передать их xargs, таким образом:
find /startingdir -name 'file name' -exec dirname {} \; | sed 's/ /\\ /g' | xargs command
Обратите внимание, что необходимо будет также выйти из кавычек и обратных косых черт, если у Вас будут каталоги, которые включают их. Это могло заменить команду sed:
sed -e 's/\\/\\\\/' -e 's/ /\\ /g' -e 's/"/\\"/g' -e "s/'/\\\\'/g"
(Отметьте дополнительные обратные косые черты на двойном заключенном в кавычки сценарии. Строковые обратные косые черты использования одинарной кавычки буквально, но строки двойной кавычки интерпретируют обратные косые черты, таким образом Ваша оболочка интерпретирует "\\\\"
как \\
в котором sed нуждается для литерала \
, в то время как '\\\\'
интерпретируется как \\\\
в котором sed нуждается для литерала \\
.) Это выйдет из существующих обратных косых черт сначала, затем выйдет из пробелов, двойные кавычки и одинарные кавычки.
Если можно использовать Системные расширения Интерфейса X/Open, то первая версия (никакие кавычки или обратные косые черты) упрощает до:
find /startingdir -name 'file name' -exec dirname {} \; | xargs -I {} command {}
Если у Вас будут кавычки и обратные косые черты в Ваших именах каталогов, то их должны будут все еще оставить как выше (но не выходя из пробелов).
Так или иначе, если у Вас есть новые строки в Ваших именах каталогов, затем у Вас есть большие проблемы, чем я могу помочь с.
Отредактированный для удаления версии удара, очищенной на основе входа от Dennis Williamson