Найдите команду для поиска деревом каталогов

Другой подход:

for file in 01.txt 02.txt; do sed '1d;$d;' "$f"; done > output

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

for file in *.txt; do ...

Можно также использовать расширение оболочки:

for file in 0{1,2}.txt; do ...
4
29.04.2014, 07:22
4 ответа
[113317] Я не знаю ни одной команды, которая бы это сделала.

Одна возможная реализация сценария. [113768] rfind:

Использование [113769]rfind path filename

0
27.01.2020, 21:02
[113036].
0
27.01.2020, 21:02

Следующее использует findи по-прежнему будет выполнять поиск от корневого каталога до текущего каталога, но будет просматривать только каталоги на этом единственном пути:

find / -exec bash -c '[[ $PWD != "$1"* ]]' bash {} \; -prune -name foo -print

Первая часть команды, до -prune, будет определять, находится ли текущий проверяемый путь в пути $PWD. Если он не находится на пути к текущему каталогу, он удаляется из пути поиска.

Сравнение выполняется с помощью очень короткого bashсценария, который просто проверяет, соответствует ли текущий каталог $PWDначалу текущего пути.

Бит после -pruneпросто пытается сопоставить fooс именем проверяемого файла.

Пример :Попытка найти что-то под названием binгде-то в структуре каталогов выше, где я сейчас нахожусь.

$ pwd
/home/kk/local/build/ast/build/src/cmd/ksh93/sh
$ find / -exec bash -c '[[ $PWD != "$1"* ]]' bash {} \; -prune -name bin -print
/bin
/home/kk/local/bin
/home/kk/local/build/ast/bin

В системах без bashили там, где есть более быстрый -–-запуск shоболочки:

find / -exec sh -c 'case $PWD in ("$1"*) exit 1; esac' sh {} \; -prune -name bin -print
1
27.01.2020, 21:02

Переход по пути каталога

f=/home/bu5hman/test; file=${f##*/}; base=${f%/*}
while [ ! -z $base ]; do
    find $base -maxdepth 1 -name $file
    base=${base%/*}
done
0
27.01.2020, 21:02

Теги

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