Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Найти директории path/dir, рядом с которыми есть файлы path/dir.png

Добрый день.

Появилась задача следующего вида. На диске есть директории (назовём полные пути к ним path), в которых есть поддиректория path/dir и файл path/dir.png. Нужно удалить все такие файлы, попутно составив их список.
Заведомо известно, в path/dir нет других директорий с таким свойством.

Я могу написать скрипт на JS и т.п., обходящий рекурсивно директории в поисках файла, но вдруг на shell/bash есть более компактное решение.
Что скажете: есть ли однострочник для этой задачи?
Ответ: Этот код не работает. Вот мои эксперименты и результат.
Подготовка:
Bash
1
2
3
4
5
6
7
8
mkdir dir
cd dir
touch 1.png
touch 2.png
mkdir 2
mkdir 'sub dir'
touch 'sub dir.png'
cd ..
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
$ find dir -type d -exec echo rm -vf {}.png +
rm -vf dir dir/2 dir/sub dir
 
$ find dir -type d -exec rm -vf {}.png +
rm: невозможно удалить «dir»: Это каталог
rm: невозможно удалить «dir/2»: Это каталог
rm: невозможно удалить «dir/sub dir»: Это каталог
 
$ a=$(find dir -type d -exec echo rm -vf \"{}.png\" \;)
$ echo "$a"
rm -vf "dir.png"
rm -vf "dir/2.png"
rm -vf "dir/sub dir.png"
Затем можно сделать
Bash
1
2
3
4
$ echo "$a" | sed 's/$/;/' >e
$ sh -f e
удалён «dir/2.png»
удалён «dir/sub dir.png»
Но без вспомогательного файла почему-то не работает, то есть нельзя просто написать $a или $(echo "$a" | sed 's/$/;/').

Как бы то ни было, мои цели были достигнуты.
Вопрос: Найти директорию куда установилась программа

смотрю через наутилус там тысячи файлов в 1-ой только usr/bin
все просматривать можно бесконечно.
Есть простой путь узнать? Мне нужно заменить 1 файл в нём заменить.

Добавлено через 2 минуты
читаю туториал:

/usr/bin - исполняемые файлы программ
/usr/sbin - исполняемые файлы программ, которые запускаются с правами администратора
/usr/games - исполняемые файлы некоторых игр

/usr/lib - библиотеки программы
/usr/share - остальные файлы программы
--------------------------
? неужели надо миллиард файлов вручную просматривать, чтобы найти emacs?

Добавлено через 10 минут
сомневаюсь что поможет find.

Добавлено через 1 минуту
если я даже не знаю точно в какой директории искать.

Добавлено через 2 минуты
и не надо мне рассказывать про cd home и тому подобное cd /bin
Ответ:
Сообщение от __py__
/usr/bin - исполняемые файлы программ
/usr/sbin - исполняемые файлы программ, которые запускаются с правами администратора
/usr/games - исполняемые файлы некоторых игр
Кроме этого, есть ещё директории, где лежат программы в линуксах:
/usr/bin
/usr/sbin
В обоих этих директориях лежат пользовательские приложения, которыми повседневно пользуются все юзеры этой машины. Те, которые относятся к GUI различных DE, те, которые запускаются из главного меню в GUI, те, которые вы видите ежедневно.
В /bin и /sbin - приложения для администрирования. Они доступны с момента запуска в консоли уже на первом init . Это такие приложения, которыми администратор пользуется для конфигурирования системы, создания/редактирования/удаления пользователей, разделов, файлов (в том числе системных). Без которых "как без рук" в самой минимальной конфигурации. Те, которые в /usr/bin /usr/sbin обычно в минимальной конфигурации не нужны, их нужность появляется позже - на третьем и пятом уровне init .
Вопрос: Права доступа на директории при чтении, изменении и удалении файлов

Всем привет , помогите разобраться с правами доступа.
У нас есть 5 директорий и 5 файлов , нужно удалить 3 и 5 директоии вместе с файлами , файл из второй директории записать в конец файла из первой , а первую первую директорию объединить с четвертой .



насколько я понимаю для всех подходит rwx, но нужно написать минимальные а знаний на это не хватает(
Ответ: Вам следует помнить, что директории — это суть файлы, со списком содержимого. При перемещении файла из одной директории в другую физического перемещения данных файла не происходит — только изменяются два списка: дир_источник и дир_получатель.
Т.е для того чтобы «файл из второй директории записать в конец файла из первой» необходимо для 1дир иметь права на запись, обеим права на вход, 2файл право на чтение, 1файл право на запись.
Вопрос: Найти директории по тэгу и провести в них поиск

Добрый день.

Начну со стандартной фразы: "В Баше я новичек, даже на кириллице его название написал)".

У меня на баше стоит задача:
Например в каком-то из каталогов /data/br/gan1/ , /data/br/gan2/ , /data/br/gan3/
есть файл под названием rock 160, в тех которых есть, необходимо перейти
на два уровня ниже (например /data/br/gan2/call/users/) и удалить файлы которые созданы около 6 месяцев назад.

Как найти rock 160 через find я понимаю и как отдельно найти и удалить файлы которые созданы около 6 месяцев назад, тоже
ясно, но как их связать между собой никак не могу понять, может подскажите от чего необходимо идти?
Ответ: Спасибо, буду дальше разбиратся.....
Вопрос: Найти папки с заданным именем, удалить старые файлы и пустые папки

добрый день
помогите написать маленький скриптик
1. найти папки с именем "папка обмена" в /volume1/public
2. в найденных папках и их подпапках найти файлы старше 5 дней и удалить их
3. найти пустые подпапки в папках "папка обмена" и удалить их

спасибо
Ответ: Когда человек хоть что-то делает с ним уже можно "разговаривать на одном языке". А по поводу man — плохо искали
Bash
1
find /tmp/test/ -path '*/папка обмена/*' \( \( -type d -empty \) -o \( -type f -mtime +5 \) \) -delete
Вопрос: Назначить ip с которого будет выход в сеть для VDS

Доброе время суток. Есть Vds на Crowncload На машине 2 ip. они сразу подключены. простучаться можно сразу по 2 ip. Вопрос в другом, как установить ip с которого будет выход в сеть.

Если кто в курсе, заранее спасибо за инфу.
(сижу под убунтой)
Ответ: Да уже не суть, я сам разобрался. Все немного кустарнее, может есть и другие варианты, но я меняю ip сейчас так.

ifdown venet0:0; ifdown venet0:1; (нужный ip первым) ifup venet0:1; ifup venet0:0

костыльное решение, но работает.
Осталось под это скриптец подцепить и более менее рабочая тема будет.
Вопрос: Сравнение размеров файлов

Всем привет!
Подскажите, как сравнить файл(размер и название которого уже записаны в переменную) с другими файлами в указанной директории. То есть сравнить их размеры и вывести в отдельный текстовый документ.

Bash
1
2
3
4
5
cd /e/Test/1
file1=$(dir -S -r | awk '{print $1}')
filesize1=$(wc -c $file1 | awk '{print $1}')
mv $file1 /e/Test/2
cd /e/Test/2
Тут две директории и в первой я нахожу файл с наименьшим размером, записываю его данные в переменные и перемещаю в другую директорию, в которой я должен сравнить его размер с другими размерами файлов
Заранее спасибо!
Ответ: N9wKa, Вы записали в переменную filesize размер тестируемого файла
а теперь в цикле мы вычисляем размеры каждого файла size из второй директории и сравниваем их
Тоесть size это временная переменная для хранения текущего размера каждого файла
Вопрос: Скрипт архивирования файлов за прошлый месяц

Пишу скрипт для архивирования файлов с датой прошлого месяца, архив должен помещаться в отдельную директорию, а архивированные файлы удаляться, но не могу придумать как указать дату в скрипте, ведь в директории находятся файлы с датой позапрошлого месяца и текущего. Скрипт будет выполняться каждый месяц первого числа, например набросал код:
Bash
1
find /srv/dir/ -type f -mtime +30 -exec zip -r /srv/dir/archive/`date +%Y-%m-%d`.zip {} \;
который архивирует файлы старше 30 дней, но нужно архивировать то за прошлый месяц. Подскажите кто-что знает.
Ответ: Спасибо за подсказку. Воспользовался средствами zip.
-r заменил на -rm чтобы удалялись файлы которые помещаются в архив.
Вопрос: разделить на gz файлы

Здравствуйте!
по запарке выполнил команду mv для двух .gz файлов
допустим 1.gz и 2.gz
вместо того чтобы переместить их в директорию dir, которая должна была быть создана заранее выполнилЖ
mv 1.gz dir
mv 2.gz dir

имеем файл dir естественно
есть ли способ вернуть файлы в первоначальное состояние?

смеяться можно, сам смеюсь.. но файлы нужные
спасибо
Ответ: ТщательнЕе надо. Служенье муз не терпит суеты!
Файл 1.gz придется восстанавливать из бэкапа. Он у вас, конечно же, есть?
Либо попробуй extundelete, вдруг повезет...
Вопрос: Как предотвратить разбиение имени файла с пробелом

Bash
1
2
3
4
for i in $(find $1 -type f -size +$2c -size -$3c)
do
echo $i
done
Есть такой код, который выводит имена всех файлов с заданным размером. Скажите: "нахера я сделал это в цикле, когда мог написать одну команду?". Просто в моей проге вместо "echo $i" будет какой-то код, который будет обрабатывать каждый файл, а здесь я так написал для упрощения понимания проблемы.
Так вот проблема: если в полном названии файла присутствуют пробелы, это имя делится на части.
Например: команда find нашла файл /home/user/New dir/my dog.jpg
Вывод:
/home/user/New
dir/my
dog.jpg
Вопрос: как с этим бороться?
Ответ: ProgSeg, $IFS - встроенная переменная bash, разделитель полей во вводимой строке. Заносим ее значение по умолчанию в переменную OLD, далее переопределяем это значение (man echo), собственно далее печатаем найденное find'ом и возвращаем $IFS к предыдущему состоянию.