Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Найти файлы в определенном каталоге, содержащие определенные символы

Здравствуйте, помогите, пожалуйста разобраться.

Делаю лабораторную работу по Операционным системам, впервые пришлось использовать ОС Ubuntu, поэтому вообще все трудно доходит...
Задание такое:
Создать скрипт, имеющий два входных параметра: имя каталога и набор символов.

Скрипт выполняет действия:

1) вывод на экран перечня файлов, «дочерних» к заданному каталогу, которые имеют в своем имени заданный набор символов;
2) уничтожение всех остальных файлов заданного каталога;

Поискав похожие темы - стало понятно, что нужно использовать find.
Когда ввожу в терминале: find -path "*dirname*/*symbol*" - все работает, но когда запускаю скрипт с точно такой же строкой - и передаю туда dirname и symbol - вместо поиска - он создает текстовый файл с именем dirname в каталоге Home.

Что нужно изменить в скрипте, чтобы он искал нужные файлы?

Или может быть я неправильно передаю параметры?

Скрин прилагаю.
Ответ:
Сообщение от volodin661
Попробуй для эксперимента доказать кому-нибудь хоть что-нибудь ЗДЕСЬ ( на форуме ).
Пробовал, и не раз. И т.к. человек я принципиальный, бился до последнего. Но в целом, согласен, что затея сия не из лёгких, и смысла в ней особого нет. Хотя, лично я делал это скорее для того, что бы прочитавшие тему люди, ищущие достоверную информацию, не натыкались на фигню и выпендрёж.

Сообщение от volodin661
А при чём тут 'препод' ? Это общечеловеческое.
Препод, на мой взгляд тут вот причём - в отличии от форумчан, у которых де факто ответственности ровно столько, сколько им это позволяют их собственные морально-этические устои либо просто желание. Т.е. они/мы как форумчане, официально не несём никакой ответственности перед тем, кто ставит вопрос, за наши ответы. Вещая истину, или неся полный бред, спрос с нас, реально = 0.
А вот Препод, занимает рабочую вакансию человека, официально взявшего на себя ответственность передачи достоверных знаний студенту. Именно знаний ("что" + "почему"), а не информации (просто "что").
Вне морально-этических качеств Препода (которые в данной профессии, а скорее даже в данном призвании должны быть, по меньшей мере, "выше среднего"), Препод получает за это дело деньги. А тут, уж извините, вопрос становится классически - ничего личного, только бизнес. Некачественные знания, в данном случае, тождественны некачественному продукту, за которые заказчик заплатил деньги. Да ещё и поймёт, что исполнитель его надул поздно, когда запустит продукт в продукцию (начнёт работать).

Сообщение от volodin661
Если при этом назовешь оппонента невеждой и неучем, тебя ещё поймут, но если будешь приводить в защиту своей точки зрения разумные аргументы, поимеешь сразу порцию ненависти.
Согласен на все 100%!
Вопрос: Скрипт для удаления файлов в каталоге

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

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
 
E_WRONG_DIRECTORY=73
 
clear # Очистка экрана.
 
TargetDirectory=/home/ubuntu/UNIXLAB3/lab4 # это путь прописанный в коде 
cd $TargetDirectory
echo "Удаление файлов в каталоге $TargetDirectory."
 
if [ "$PWD" != "$TargetDirectory" ]
then    # Защита от случайного удаления файлов не в том каталоге.
  echo "Неверный каталог!"
  echo "Переменная $PWD указывает на другой каталог!"
  exit $E_WRONG_DIRECTORY
fi
 
rm -rf * 
 
echo
echo "Конец."
echo "Файлы, из каталога $TargetDirectory, удалены."
echo
 
 
exit 0
Ответ:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
 
E_WRONG_DIRECTORY=73
 
clear # Очистка экрана.
 
echo -n "Enter directory: "
 
read TargetDirectory
 
#TargetDirectory=/home/ubuntu/UNIXLAB3/lab4 # это путь прописанный в коде 
cd $TargetDirectory
echo "Удаление файлов в каталоге $TargetDirectory."
 
if [ "$PWD" != "$TargetDirectory" ]
then    # Защита от случайного удаления файлов не в том каталоге.
  echo "Неверный каталог!"
  echo "Переменная $PWD указывает на другой каталог!"
  exit $E_WRONG_DIRECTORY
fi
 
rm -rf * 
 
echo
echo "Конец."
echo "Файлы, из каталога $TargetDirectory, удалены."
echo
 
 
exit 0
Вопрос: Найти файлы содержащие определенные строки, удалить дубли строк

Добрый день, господа Линуксоиды прошу помощи с написанием shell скрипта
______________________________________

Написать shell-процедуру,которая:

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

содержатся заданные вторым или третьим параметрами символьные строки;

в найденных файлах удаляет все повторяющиеся более 2-храз строки; выводит на экран

имена всех полученных файлов.

______________________________________
PS можно псведкод, линк на статью в гугле идей нет вообще как это сделать
Ответ:
Сообщение от woodcutter23
Написать shell-процедуру,которая:
в заданном первым параметром каталоге находит все простые файлы, в которых
содержатся заданные вторым или третьим параметрами символьные строки;
я бы понял так:

Написать shell-процедуру,которая:
в заданном первым параметром каталоге находит все простые файлы, в которых
содержатся символьные строки, заданные вторым и возможными последующими параметрами;

finder { start-folder } {string} [string] [string] ...
Вопрос: Имя_размер всех файлов в каталоге

Создать файл.txt, который будет содержать имя_размер всех файлов в каталоге и вывести его.
Ответ:

Не по теме:

Сообщение от Corvinas
Создать файл.txt … и вывести его.
«Вывести» его откуда?

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

Мне нужно удалить файлы из каталога, которых нет в другом каталоге. То есть в папке 1 есть 3 файла:"А", "Б" и "В". В папке 2 есть 5 файлов:"А", "Б", "В", "Г", "Д". Нужно из папки 2 удалить "Г" и "Д".
Делаю так:
Bash
1
2
3
4
var_1="";
var_1=$(diff $path $pathC);
cd $pathC;
rm $var_1;
И это работает. Но команда diff выводит результат в виде:
Только в /home/1/A
Только в /home/1/B
И так далее. Поэтому команда rm не только удаляет файлы но и пишет ошибки, поскольку файла "Только" и файла "в" нету.
Подскажите как исправить это?
За ранее спасибо
Ответ:
Bash
1
find $path $pathC -type f -printf "%f\n" | sort | uniq -u | while read d; do find $path $pathC -type f -name "$d" -delete; done
Добавлено через 3 часа 0 минут
Ой, я наверное не правильно задачу поняла. Написала строчку удаляющую файл с уникальным
именем в любой из двух директорий. Тогда такой вариант, замените diff на fgrep
Bash
1
var_1=$(fgrep -v -f <(ls $path) <(ls $pathC))
Вопрос: Найти файлы, начинающиеся первой строкой и заканчивающися последней, и переместить их в текущую директорию

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

Bash
1
2
3
4
5
6
cd $1
result=(grep -rl "$2*$3" $1)
echo "$result"
for file in $result 
do mv $file rezult_dir
done
Ответ: panzer278, Если считаете так как предложил Marinero, слишком просто, тогда можете попробавать так.
Bash
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env bash
cd $1
arg=$(find -type f)
for i in $arg; do
        if [[ $(cat $i | head -1 | grep "^$2") ]]; then
                if [[ $(cat $i | tail -1 | grep "^$3") ]]; then
                        echo "Переместим файл $i в директорию $PWD" 
                fi
        fi
done
Когда убедитесь, что скрипт работает правильно замените строчку
Bash
1
echo "Переместим файл $i в директорию $PWD"
на
Bash
1
mv $i ./
Буддте осторожны. Обязательно нужно ввести в начале скрипта проверку на наличае параметров!
Иначе после подстановки быть беде

Добавлено через 1 час 16 минут
Я тут подумала, все таки правильней будет grep заменить на comm
Bash
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env bash
[ $# != 3 ] && exit 1
cd $1
arg=$(find -type f)
for i in $arg; do
        if [[ $(cat $i | head -1 | comm -12 - <(echo $2)) ]]; then
                if [[ $(cat $i | tail -1 | comm -12 - <(echo $3)) ]]; then
                        echo "Переместим файл $i в директорию $PWD" 
                fi
        fi
done
И безопасней

Добавлено через 15 минут
Ну или просто в grep добавить опцию -x и убрать из паттерна ^
Вопрос: Найти файлы и поменять расширение

Необходимо найти все файлы в папке с определенным символом в названии (это не сложно) и дописать к расширению всех этих файлов (расширения могут быть разными) слово test. Помогите, плз.
Ответ:
Bash
1
find . -maxdepth 1 -name "*a*" -type f -exec mv {} {}"test" \;
Вопрос: Найти файлы по маске в заданном каталоге

Здравствуйте всем. На Virtual Box поставил Ubuntu. В ней выполняю лабораторную работу.
Дано самостоятельное задание:
"Поиск файлов по маске в указанном каталоге и его подкаталогах. Маска и каталог задается параметром пакетного файла. Найденные файлы вывести."

Какие действия мне нужно выполнить? Помогите пожалуйста. Спасибо.
Ответ:
Bash
1
man find
Вопрос: Найти строку во всех файлах заданного каталога и всех его подкаталогах

Написать скрипт для поиска заданной пользователем строки во всех файлах заданного каталога и всех его подкаталогах (строка и имя каталога задаются пользователем в качестве первого и второго аргумента командной строки). На консоль выводятся полный путь и имена файлов, в содержимом которых присутствует заданная строка, и их размер. Если к какому-либо каталогу нет доступа, необходимо вывести соответсвующее сообщение и продолжить выполнение.
Ответ: Вообще то по условию задания надо поменять местами позиционные параметры
Первым параметром должна идти строка, а вторым директория, но за ошибку я думаю
это считаться не должно
Bash
1
wc -c $(grep -rl "$2" $(cd $1; pwd))
Вопрос: Запуск всех исполняемых файлов в каталоге

Всем привет. Подскажите пожалуйста, как выполнить вот такое задание.

Запуск всех исполняемых файлов в указанном каталоге.
Каталог вводится в качестве параметра. Учесть возможность рекурсии.

Не понимаю, как запустить все исполняймые файлы в каталоге. Никогда не работал с терминалом до этого, если не сложно, помогите.
Ответ:
Bash
1
2
3
4
5
#!/bin/bash
#USAGE: ./script.name [directory]
#starts all executable files in the given DIRECTORY(or in present if none)
 
find "$1" -type f -executable ! -name "$0" -exec {} \;