Member 14720175 Ответов: 1

[BASH] проблема написания скрипта


Hello, I'm a beginner in programming and I'm having trouble writing a script.
Write a script with two parameters: file name mask and directory name.
The script's task is to display a list of file names from the given directory, matching the given mask together with the name of the owner and his UID number
I am asking for advice on the execution of the script.
Regards. :)

What I have tried:

<pre>! # / Bin / bash
find "$ 1" -name "*. $ 2" -exec stat -c "% N% u% U" '{}' \;

Richard MacCutchan

Использование "*.$2", вероятно, неверно, так как второй параметр-это полная маска имени файла в соответствии с вашим вопросом.

1 Ответов

Рейтинг:
0

k5054

Обратите внимание на пробелы и заглавные буквы
То, что вы хотите, это что-то более похожее

#!/bin/bash
find "$1" -name "*.$2" -exec stat -c "% N % u% U" {} \;

Я не пробовал это сделать, чтобы выяснить, делает ли он то, что вы хотите, или чтобы выяснить, является ли вызов stat это верно, но обратите внимание на отсутствие пробелов и на то, что хэш-Бах (#!) следует /bin/bash нет / Bin / bash

У вашего решения есть одно возможное улучшение, которое я мог бы порекомендовать. С помощью -exec означает, что для каждого найденного файла создается новый процесс. find Если у вас есть тысячи спичек, то это может занять очень много времени. Лучшим решением может быть использование xargs напр.
find "$1" -name "*.$2" | xargs stat -c "% N % u% U"
Видеть человек ксарги относительно деталей

Я также не уверен насчет вашего второго arg to find Я думаю, что то, что у вас есть, совпадает только с расширением файла (например, foo.формат txt). Если вы хотите передать в файл глобус для сопоставления, скажем "*мусорное ведро", чтобы найти bar.bin, max.bin apple.bin и т. д., то вы, вероятно, могли бы просто использовать "$2" в качестве аргумента к -name