У меня есть следующие функции, определенной в моем ~/.bashrc:
dnif() {
# Recursively list a file from PWD up the directory tree to root
[[ -n $1 ]] || { echo "dnif [ls-opts] name"; return 1; }
local THERE=$PWD RC=2
while [[ $THERE !=/]]
do [[ -e $THERE/${2:-$1} ]] && { ls ${2:+$1} $THERE/${2:-$1}; RC=0; }
THERE=$(dirname $THERE)
done
[[ -e $THERE/${2:-$1} ]] && { ls ${2:+$1} /${2:-$1}; RC=0; }
return $RC
}
, который будет искать имя вы предоставляете в качестве параметра в каждой директории вверх от текущего до корня, и если он найден, перечислите его с помощью «ls» и дополнительных опций ls -options, которые вы предоставляете. Пример вывода:
[email protected]:~/dev/example
$ dnif; echo $?
dnif [ls-opts] name
1
[email protected]:~/dev/example
$ dnif -alp nonesuch; echo $?
2
[email protected]:~/dev/example
$ dnif -alp .bashrc; echo $?
-rw-r--r-- 1 me mine 3486 Apr 3 2012 /home/me/.bashrc
0
[email protected]:~/dev/example
$ dnif -d .
/home/me/dev/example/.
/home/me/dev/.
/home/me/.
/home/.
/.
Обратите внимание:
- "dnif" является "найти" в обратном направлении.
- Функция представляет собой конечный цикл (не рекурсивный), не создает подоболочек и использует встроенные функции Bash как можно больше для скорости.
- В списке отображаются все образы на каждом возрастающем уровне каталогов.
- ls -opts необязательны, но должны предшествовать требуемому аргументу поиска.
- Аргумент поиска может быть файлом или каталогом.
- Если аргумент поиска является каталогом, включите ls -opt '-d', чтобы ограничить результаты именами каталогов, а не содержимым.
- Функция возвращает код выхода
- 0, если есть хотя бы один хит,
- 1, если параметры не предназначены для помощи, и
- 2, если ничего не найдено.
Что значит, вы не знаете, где находится ваш корень? Можете ли вы привести краткий пример того, как выглядит дерево каталогов? Каков ваш текущий рабочий каталог и где вы хотите искать файлы? Как правило, для поиска везде, вы можете запустить 'find/-name' как пользователь root. –