Ответ на Ваш первый вопрос quotes
.
Вместо того, чтобы делать-> tar cvf backup.tar $LISTOFFILES
Сделайте это-> tar cvf backup.tar "$LISTOFFILES"
Давайте смотреть на пример (я взял один из Вашего файла для этой демонстрации, даже при том, что файл не существует на моем компьютере, смотрит на ошибку, которую я получаю с и без кавычек) -
[jaypal:~] file="/home/user/Python Tutorial.pdf"
[jaypal:~] ls $file
ls: /home/user/Python: No such file or directory
ls: Tutorial.pdf: No such file or directory
Ошибка появилась для двух файлов /home/user/Python
и Tutorial.pdf
. Давайте поместим a quote
к нашему variable
и посмотрите то, что мы получаем.
[jaypal:~] ls "$file"
ls: /home/user/Python Tutorial.pdf: No such file or directory
Ошибка появилась только однажды для файла /home/user/Python Tutorial.pdf
Сократить /path/to/file
существует несколько путей. Мой фаворит был бы awk
но я покажу Вам один для sed
также.
sed
метод:
[jaypal:~/Temp] echo "$filename"
/home/user/file1.pdf /home/user/file2.odt /home/user/Python Tutorial.pdf
[jaypal:~/Temp] echo "$filename" | sed 's@/home/user/@@g'
file1.pdf file2.odt Python Tutorial.pdf
Можно включать его в сценарий как это -
LISTOFFILES=$(find ~ \( -name '*.[pP][dD][fF]' -o -name '*.[oO][dD][tT]' \) | sed 's@/home/user/@@g' )
Вещь помнить вот, мы делаем substitution
. Мы занимаем место /home/user/
кому: nothing
. Если Вы find
файлы луга больше чем из одного каталога затем можно или сделать тонны и тонны замен (yikes!) или делают awk
путь.
awk
метод:
awk -F"/" '{print $NF}'
Да, вот именно. Работал бы на файлы Вы find
в соответствии с любым каталогом или их подкаталогами.
Таким образом, Ваш сценарий мог иметь это следующим образом -
LISTOFFILES=$(find ~ \( -name '*.[pP][dD][fF]' -o -name '*.[oO][dD][tT]' \) | awk -F"/" '{print $NF}')
Вот некоторые случайные подсказки, что я думаю, может быть полезно для Вас -
find
имена файлов insensitively
, использовать iname
вместо того, что Вы имеете прямо сейчас. Проверьте это -[jaypal:~/Temp] find . -name "j*.txt"
./jP.txt
[jaypal:~/Temp] find . -iname "j*.txt"
./jj.TXT
./jP.txt
/path/to/file
при помощи basename
. Я дам пример, и можно включить его в сценарий, как Вы чувствуете себя комфортно.[jaypal:~/Temp] filename="/usr/bin/java.pdf"
[jaypal:~/Temp] echo "$filename"
/usr/bin/java.pdf
[jaypal:~/Temp] basename "$filename"
java.pdf
Надеюсь, это поможет!
D короток для демона. Демон является продолжительным процессом, который предоставляет своего рода услугу.
httpd и syslogd являются демонами, также известными как фоновые процессы. Ими обычно непосредственно не управляет конечный пользователь, а скорее выполняют постоянно и предоставляют услугу или выполняют процесс, который постоянно ожидает запроса или запроса.
httpd, например, ожидает клиентов для запроса его содержания, и syslogd постоянно прислушивается к журналам, которые будут отправлены в него так, они могут быть сохранены. sshd является другим известным демоном, который постоянно прислушивается к удаленному клиенту, чтобы запросить установить соединение SSH к устройству.