У меня есть простой скрипт, который я понимаю больше всего, это команда find, которая неясна. У меня много документации, но она не очень понятна. Моя мысль в том , что он работает как для цикла, то в настоящее время находится файл обменен в течение {} и скопировать в $ HOME / $ DIR_NAME, но как поиск с -path и -prune -o работой? Досадно иметь такую конкретную и актуальную документацию и все еще не знать, что происходит.
#!/bin/bash
# The files will be search on from the user's home
# directory and can only be backed up to a directory
# within $HOME
read -p "Which file types do you want to backup " file_suffix
read -p "Which directory do you want to backup to " dir_name
# The next lines creates the directory if it does not exist
test -d $HOME/$dir_name || mkdir -m 700 $HOME/$dir_name
# The find command will copy files that match the
# search criteria ie .sh . The -path, -prune and -o
# options are to exclude the backdirectory from the
# backup.
find $HOME -path $HOME/$dir_name -prune -o \
-name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;
exit 0
Это просто документация, из которой я знаю, что смогу понять это.
шаблон пути
Имя файла соответствует шаблону оболочки. Метасимволы не обрабатывают / или . специально; так, например, найди. -path "./sr*sc" напечатает запись для каталога с именем ./src/misc (если он существует). Чтобы игнорировать все дерево каталогов, используйте -prune вместо проверки каждого файла в дереве. Например, чтобы пропустить каталог src / emacs и все файлы и каталоги в нем, и напечатать имена других найденных файлов, сделайте что-то вроде этого:
find . -path ./src/emacs -prune -o -print
- Действие: команда -exec; Этот небезопасный вариант действия -execdir указан в POSIX. Основное отличие состоит в том, что команда выполняется в каталоге, из которого была вызвана команда find , это означает, что {} раскрывается в относительный путь, начинающийся с имени одного из начальных каталогов, а не только с базового имени соответствующего файла.
В то время как некоторые реализации find заменяют {} только там, где оно появляется само по себе в аргументе, GNU find заменяет {} везде, где оно появляется.
А также
Например, чтобы сравнить каждый заголовочный файл C в или ниже текущего каталога с файлом / tmp / master:
find . -name '*.h' -execdir diff -u '{}' /tmp/master ';'