Как перебирать все директорий начиная от /home/.. и найти *.txt файлы и показать их через cat, включая их директорий?
Добрый день, как написать скрипт который будет перейти по всем папкам и если в этой папке к примеру folder1, есть текстовой файл, то вывести его на экран через cat?
Наверное никто не понял что мне на самом деле нужно. Допустим есть такие директорий /home/folder1/folder2/folder3
в folder2 есть текстовой файл file.txt. /home/folder1/folder2/file.txt
Нужен пример скрипта который будет перебирать все директорий начиная от /home/......
и находить эти *.txt файлы и в КОНЦЕ сделать вывод folder2 - file.txt - (то что написано внутри file.txt)
тоесть Имя Папки - Имя Текстового файла - ( то что написано внутри текстового файла )
Проблема в том что у папки или файла может быть любое имя. и я не смогу использовать их имена как в этом скрипте. echo "folder2 - file.txt - $(cat file.txt)"
Но тут выдает все через пробел, как сделать так что бы выдало все по очереди ?
Например folder1 - file1.txt - other text...( то что написано внутри) folder2 - file1.txt - other text...( то что написано внутри) folder2 - file2.txt - other text...( то что написано внутри)
и т.д.
и так с каждой папкой и файлом ?
Нужно какой нибудь цикл создать ? или я чтото не правильно делаю ?
я тебе написал и так все, этого должно вполне хватить find . -type f -name "file.exe" -exec cat {} \; . директория от которой искать -type f выводить только файлы -name имя файла -exec дополнительно выполнить команду с найденм cat {} в скобках имя найденного файла.( в цикле) \; -закрываем и экранируем закрывание
чего тут не хватает ?
AVKor, так же можно исключать определенные каталоги, и -name умеет очерь простенькие вещи, если нуна хорошая маска то нужно делать регулярку -regex ".*\.\(php\|js\|css\)"
я все достаточно подробно расписал на вики.
Проблема в том что нужно сделать все в одном скрипте. Без $1
Как перекинуть команду
find ./* -name "*.txt" -exec {} \;
В myscript.sh
Что бы при запуске скрипта выполнялся сразу find...
Если у вас на уроке преподаватель задал такую задачу, то выполняйте ее самостоятельно.
Если не на уроке - с какого потолка ограничение в один скрипт?
Сделайте скрипт и запустите команду.
Или НОРМАЛЬНО опишите вопрос со всеми граничными условиями.
Простите, но это же тупо. Создать 2 скрипта для запуска одной команды.
То есть
1-ый скрипт echo "$1 - $(cat $1)"
2-ой find ./* -name "*.txt" -exec ./myscript.sh {} \;
и при запуске 2-ого выполнить команду.
Но я вроде как уже нашел решение.
ff=`find ./* -name "*.txt"`
for i in $ff
do
echo "${i} - $(cat ${i})"
done
Для разового вывода результата, который вы просили, это не тупо, а наоборот - максимально быстро - я же не говорил сделать два скрипта, я говорил сделать один скрипт и можно будет его из командной строки сразу выполнить.
Просто корректнее ставьте задачу. И желательно ОДНИМ вопросом, а не тремя.
а если нужны красивости, то лучше делайте $(find ./* -name "*.txt"), конструкция `` считается нежелательной.