LINUX.ORG.RU

8
Всего сообщений: 167

Странное поведение find

Ubuntu 14.04.5 LTS

Запустил find по корню:

root@kinder:~# find / -name 'pyenv'

root@kinder:~# 

Ничего не нашёл. Я удивился, т.к. знал, что такая папка должна быть точно. Сделал более «широкий поиск»:

root@kinder:~# find / -name '*pyenv*'
/usr/local/pyenv_old
/usr/local/pyenv_old/test/pyenv.bats
[...]
/usr/local/pyenv_old/libexec/pyenv-version-origin
/usr/local/pyenv_old/libexec/pyenv-versions
/usr/local/pyenv_old/libexec/pyenv-completions
[...]
/usr/local/pyenv/libexec/pyenv-local
/usr/local/pyenv/libexec/pyenv-init
/usr/local/pyenv/libexec/pyenv
/usr/local/pyenv/bin/pyenv
/usr/local/pyenv/plugins/python-build/test/pyenv.bats
[...]

Файлы нашлись. Повторил поиск ещё раз по корню:

root@kinder:~# find / -name 'pyenv'
/usr/local/pyenv_old/libexec/pyenv
/usr/local/pyenv_old/bin/pyenv
/usr/local/pyenv
/usr/local/pyenv/libexec/pyenv
/usr/local/pyenv/bin/pyenv

Файлы нашлись, но далеко не все.

Как такое могло произойти?

 

iljuase ()

Copy and rename all img

Всем привет

Задача у меня стоит такая:

Нужно все изображения формата .bmp со всех входящих папок переместить в одну и переименовать ( все фото с одинаковым названием). Переименовать желательно на название родительской директории.

Пример,

исходящие пути:

ebwjk23jhb23hj/icon.bmp

er21jhhbr12hr1/icon.bmp

32ml3k2mkl32km/icon.bmp

итог:

img/ebwjk23jhb23hj.bmp

img/er21jhhbr12hr1.bmp

img/32ml3k2mkl32km.bmp

Мне удалось только скопировать все одному директорию но без переименовывания:

find ./ -iname «*.bmp» -type f -print0 | xargs -0 -I ‘{}’ /bin/cp «{}» img/

Подскажите, пожалуйста :)

 , , ,

edwlad ()

FIND+GREP

Всем привет

Есть команда:

find ./ -name ‘*.txt’ -exec grep -f 250.txt -A2 -B2 -H {} ; > result.txt

В файле 250.txt находится списком 250 сайтов: site1.com site2.com site3.com …

Как сделать вывод результатов поиска не в result.txt а в отдельный файл по каждому сайту? к примеру: result_site1.com.txt result_site2.com.txt result_site3.com.txt

Подскажите, пожалуйста.

 , ,

edwlad ()

GREP из списка по всем директориям в определенных файлах

Добрый день.

Есть список сайтов, которые нужно найти во всех .txt файлах во входящих директориях.

Ищет, но во всех вложенных директориях во всех файлах:

grep -r -f 250.txt ./

Питаюсь добавить исключения, не работает:

grep -r -f 250.txt «*.txt»

  • grep: *.txt: No such file or directory

По одному патерну ищет без проблем:

find ./ -name «*.txt» -exec grep -H «mysite.com» {} +

Подскажите, пожалуйста, как решить задачу?

 , , , ,

edwlad ()

Найти все утилиты по маске

Подскажите как можно найти все утилиты, присутствующие в системе? Без установки доп утилит и использования особенностей пакетных менеджеров дистрибутива, чтобы работало на любом(почти) дистрибутиве из коробки.

Желателен также компактный вызов программы, чтобы не было желания внести это в алиас (например, ручное перечисление в ls всех директорий вида bin или парсинг $PATH с помощью sed не подходит).

Возможно, есть компактные вызовы locate, grep, find про которые я не знаю?

 

NordeN ()

поиск файлов по маске

есть такая команда
find /mnt/a/home/ -path '/mnt/a/home/*/public_html/*/error_log'

счас она ищет любые подпути в символе *
я хочу чтобы * разценивалась как 1 слово
т.е. такой путь правильный
/mnt/a/home/word1/public_html/word2/error_log
а такие фильтровать
/mnt/a/home/word1/word2/public_html/word3/word4/error_log

как сделать?

 

kommersant ()

Заменить все файлы в директориях на указанный

У меня есть путь к файлу: /games/SteamLibrary/Steam/userdata/8888888888/730/local/cfg/video.txt который нужно заменить на свой. Но проблема в том, что я не знаю участок пути, которое будет на месте «8888888888». Нужно зайти в /games/SteamLibrary/Steam/userdata и оттуда найти рекурсивно все файлы «video.txt». Это мне под силу, но как их теперь заменить на заранее указанный в заранее определенном месте, например в «~/video.txt»?

 

abbat81 ()

RIP Larry Tesler

Subj. Человек придумал то, что используется всеми и во всех ОС ежедневно.

https://twitter.com/Xerox/status/1230228728992714752

 , , , ,

Tigger ()

пакетная конвертация doc to pdf

всем привет
имеются куча файлов в куче каталогов и подкаталогов в формате doc. их необходимо конвертировать в формат pdf

find "/home/man8531/conv/" -iname "*.*" -exec soffice --headless --convert-to pdf:writer_pdf_Export --outdir "/home/man8531/test" {} \;
с помощью find и libreoffice удаётся получить желаемый результат, но: конвертированные файлы складываются в указанный каталог --outdir «/home/man8531/test» без сохранения дерева каталогов. как заставить конвертировать файлы с сохранением дерева каталогов или в тот же каталог, где находится исходный файл?

 , ,

man8531 ()

Как разбить по разным каталогам содержимое одного в 8000 файлов?

Есть каталог с более чем 8000 файлов. Для ускорения работы с ним, нужно разбить находящиеся в нём файлы на группы по какому-либо признаку. 1) вариант создать 8 подкаталогов, и переместить в каждый по 1000 файлов. 2) Поскольку файлы добавлялись годами, создать папки с номерами годов, и в каждый поместить созданные в нём файлы.

Вопрос, как такое лучше всего сделать?

Приходит на ум find, но только для варианта 2).

find . -mindepth 1 -newermt '2011-01-01 00:00' ! -newermt 
'2012-01-01 00:00' -ls

Вот только выдача по -ls кривая. Вместо русских имён файлов юникоды: /\320\243\320\261\320\270\321\202\321\214\
Выдача просто по ls корректная.
почему вывод ls через find кривой и как это исправить? man пишет, что русские буквы ему UNUSUAL FILENAMES, поэтому по дефолту выводит так. Как отучить его от этого, пока не дочитал.

 , ,

hikikomori ()

find + cat

Допустим с помощью find ищем какой либо файл лога, и в выводе иx очень много, какую команду дать cat, что бы оно вывело в консоль, последний созданный файл лога, определять какой из них последний по названию файла или по времени изменения или создания файла лога. Помогите кто чем может)

 , ,

spectr16 ()

find

наткнулся на тему, где одна девушка объясняла про find , какому-то форумчанину. я немного не догнал, но задавать там вопросы не стал. решил спросить здесь. потому что тут, как я думаю, знают , вернее должны знать об этом лучше.

#mkdir dr
#touch {A..z}
#pwd 
/root 

#find / -type f -regex [AB]

не найдет. но если сделать вот так

#find * -type f -regex [AB]

то заглянет даже в созданные мной каталоги. но этого нет в синтаксисе.

как это работает вообще?

find / -где будет искать? начиная с корня и включая все вложенное? тогда почему не видит созданную мною директорию?

 ,

Assembler ()

find | wc -l нестабильно работает

Столкнулся вчера с таким явлением. В скрипте есть в том числе подсчет количества файлов в файлообменнике. Естественно, использую связку find | wc -l До вчерашнего вечера все работало как часы. Явление в том, что через несколько секунд может безрезультатно висеть сколько угодно. При этом вначале find и wc появляются вверху top-а, но потом там исчезают и обнаруживаются только по ps aux. Вероятно, без признаков явной активности.

Успешно подсчет идет в 1/3 случаев. Хотя если запускать find без конвейера, то отрабатывается всегда.

В каталоге, который надо посчитать, 890 тысяч с лишним файлов. Но вряд ли это причина. На чем застревает, не понять. Каталог с кириллическими именами файлов.

Кстати, связка find | wc -l отрабатывается довольно быстро, особенно если запускается повторно, я так понимаю, где-то есть индексация?

 ,

DrBim ()

bash как удалить файлы и директории, старше x-дней?

Есть некая директория Test. В ней находятся файлы и папки. Как удалить только то, что старше 10 дней к примеру.

Попытка применить

find  /volume1/Test -cmin +$storetime -delete

приводит к удалению и самой директории Test, если в ней нет свежих файлов, естественно.

 , ,

Illujanka ()

grep поиск до определенного слова

может ли grep искать до определённого слова и останавливать поиск после этого? смысл в том, что есть сотни тысяч текстовых файлов у которых в самом начале есть искомая информация. у всех файлов есть одно и то же ключевое слово, после которого поиск в файле должен остановиться и продолжиться уже в следующем файле.

 , , ,

man8531 ()

Архивация списка файлов с заданной даты изменения

Формирую в centos7 gz-архив со списком файлов с заданной даты изменения Например, после 29.07.2019 При выполнении команды вижу правильный список файлов, а в архиве файлы не все, почему? ниже выполняемый код Пробовал убрать --no-recursion, в итоге пакуется без учета времени правки файла

touch -t 201907290000 ./reftime;find . -cnewer ./reftime -print0 | xargs -0 tar --no-recursion -zcvf archive-$(date --iso).tar.gz;rm ./reftime -f

 , , , ,

mishall ()

Откуда берутся эти строки

Всем привет!

Вот есть скрипт:

#!/opt/bin/bash
file=/volume1/usr/wsh/scripts/output.txt
IFS=$'\r\n'
while read LINE; do
cmd_fin="$(find /volume1/users/path/ -type f -name "${LINE}" -print)"
	$cmd_fin
	if $?
	then
		echo "File is exist! "$cmd_fin" " >> /var/log/temp_find_final_files.txt
	else
		echo "file not found "$LINE" " >> /var/log/temp_find_final_files.txt
	fi
done < $file

То, что он не ищет файлы это один момент. Т.е. создан заведомо существующий файл и внесен строкой в output.txt. Если просто из консоли сделать поиск, все находит, а из скрипта нет.

А вот больше интересует, почему в консоль сыпется всякое вида:

/volume1/users/path/07.06.20.pdf: command substitution: line 2: unexpected EOF while looking for matching `''
/volume1/users/path/07.06.20.pdf: command substitution: line 4: syntax error: unexpected end of file
/volume1/users/path/07.06.20.pdf: command substitution: line 2: unexpected EOF while looking for matching `]'
/volume1/users/path/07.06.20.pdf: command substitution: line 3: syntax error: unexpected end of file
/volume1/users/path/07.06.20.pdf: line 2:Ⳑ����~4ۙ���wO$ : No such file or directory

Это find из скрипта по содержимому файла что-то ищет? Подскажите, пожалуйста.

 , ,

Aborigen1020 ()

Удобное составление индексов и диффов хомяка?

Собственно, сабж. find, grep, diff... - всё это понятно. А чтобы удобно было? Анализ содержимого файлов не нужен, только наличие/отсутствие.

 , ,

Deleted ()

Копирование файлов из большого количества подпапок.

Есть директория, в которой есть подпапки, и в этих подпапках есть еще подпапки. Цель: копирование всех файлов, из всех папок и подпапок, в другую директорию, избегая создания дерева директорий. И все это в терминале, естественно.

 , ,

erehtey ()

записать данные из субшелла в переменную

Что то всё таки не получается у меня поработать с файлами в скрипте.

Есть код:


i=0

find "/dir" -type f -print0 | while read -r -d '' per1
do
   per2="${per1##*/}"
   (( i++ ))
   dir[$i]="$per2"
done

printf "%s\n" "${dir[@]}"

printf не выведет ничего, так как read запускает свой субшелл и все данные останутся там, пробовал всякие перенаправления ничего не получается. Записывать в файл на диск нельзя. export не поможет так как он экспортирует для потомков, а не для родителей. Можно как то передать данные в переменную-массив в самом скрипте не прибегая к записи в файл на дик?

Если заменить на:


i=0

for per1 in $(find "/dir" -type f)
do
   per2="${per1##*/}"
   (( i++ ))
   dir[$i]="$per2"
done

printf "%s\n" "${dir[@]}"

То тогда если будут файлы с названиями «*, ? » и т.д. то почему то find заносит в переменную один и тот же файл несколько раз, просто команда find отрабатывает нормально, с for-ом получается какая то чепуха.

Вот такая конструкция:


i=0

for per1 in "/dir/*" "/dir/.*" -type f
do
   per2="${per1##*/}"
   (( i++ ))
   dir[$i]="$per2"
done

printf "%s\n" "${dir[@]}"

Работает просто превосходно, но совсем не просто сделать рекурсию по вложенным папкам.

 ,

v4567 ()