В первом случае дамп*
интерпретируется оболочкой и расширяется до совпадающих имён файлов, а затем передаётся в find
. В действительности, find
видит:
find dumpa dumpb ... -type f ...
Во втором случае оболочка не интерпретирует. find
does the filtering. Поэтому, учитывая рекурсивный характер find
, второй метод может найти файлы, которые первый пропустит.
Второй метод более гибкий, так как можно использовать переменные при формировании фильтров -name
/-path
, но сложно получить -оболочку для разворачивания подстановочного знака в переменной. В зависимости от того, какой у вас вариант использования, любой из них будет правильным, но второй может быть скорректирован, чтобы соответствовать первому во всех случаях (используя дополнительные опции find
, такие как maxdepth
, или prune
), но обратное не верно.
Рассмотрим:
$ tree .
.
├── dumpa
│ └── dumpc
├── dumpb
├── dumpd
└── not-dump
└── dumpe
$ find . -type f -name 'dump*'
./not-dump/dumpe
./dumpd
./dumpa/dumpc
$ find dump* -type f
dumpa/dumpc
dumpd
Также обратите внимание, что если ничто не совпадает со спецсимволом, то первый приведет к ошибке, а второй - к успеху без результата:
$ find blahblah* -type f
find: `blahblah*': No such file or directory
$ find . -name 'blahblah*' -type f
$
Я бы предпочел второй метод, потому что:
find
. И не связанный с этим пункт, пропустите xargs
:
find ... -exec ls -lrth {} +
Для этого существуют различные способы. Самое простое и худшее - иметь пароль в сценарии, как вы предлагаете. Поскольку ваш компьютер не подключен к Интернету, большинство проблем безопасности являются спорными, и вы можете просто использовать параметр sudo
-S
, который позволяет передавать пароль от STDIN:
echo password | sudo -S shutdown -h now
Более безопасный подход заключается в том, чтобы разрешить определенному пользователю выполнять команду shutdown
без пароля. Сначала запустите visudo
для редактирования файла sudoers
и добавьте следующую строку:
nate ALL=NOPASSWD:/sbin/shutdown
, которая позволит пользователю nate
запускать sudo/sbin/shutdown
без запроса пароля.
Добавить в конце сценария:
read junk
Для получения дополнительной информации см. Bash Manual .
-121--99132-Каждый процесс имеет свой собственный «текущий рабочий каталог», который нельзя изменить вне процесса.
При
grep some-string -r . &
запуске оболочки grep
в фоновом режиме текущий рабочий каталог grep
инициализируется в том же значении, что и оболочки в этот момент . grep
- определение .
вот его собственный текущий каталог, а не ничего другого; оболочка не участвует в интерпретации аргумента.
Последующее изменение каталога оболочки с помощью cd
не влияет на grep
...