У меня есть эта строка здесь find "$directory" -name "*.sh" -print0 | xargs -0 cp -t ~/bckup
, которая поддерживает все, что заканчивается на .sh. Как я могу сделать это для нескольких расширений файлов? Я пробовал разные комбинации кавычек, круглых скобок и $. Ни один из них не работал = \Bash резервное копирование указанных расширений файлов в нескольких каталогах
Я также хотел бы создать резервные копии некоторых расширений файлов в разные папки, и я не уверен, как искать имя файла для определенного расширения.
Вот весь мой код на всякий случай:
#!/bin/bash
collect()
{
find "$directory" -name "*.(sh|c)" -print0 | xargs -0 cp -t ~/bckup #xargs handles files names with spaces. Also gives error of "cp: will not overwrite just-created" even if file didn't exist previously
}
echo "Starting log"
timelimit=10
echo "Please enter the directory that you would like to collect.
If no input in 10 secs, default of /home will be selected"
read -t $timelimit directory
if [ ! -z "$directory" ] #if directory doesn't have a length of 0
then
echo -e "\nYou want to copy $directory." #-e is so the \n will work and it won't show up as part of the string
else
directory=/home/
echo "Time's up. Backup will be in $directory"
fi
if [ ! -d ~/bckup ]
then
echo "Directory does not exist, creating now"
mkdir ~/bckup
fi
collect
echo "Finished collecting"
exit 0
О, хорошо, поэтому, если бы я хотел сделать больше, чем просто 2 расширения, мог бы я просто добавлять '-o '* .txt' -o '* .jpg'' и т. д.? – Hokerie
Точно. Вы также можете использовать логическое и (или отрицание), чтобы быть более конкретным, и принудительно использовать приоритет, используя круглые скобки (но не забывайте избегать их из bash). –
Извините, я просто понял, что оригинальное сообщение было неправильным. Вам нужно добавить -name "* .c" -o -name "* .sh" -o -name "* .. jpg" и т. Д. Исправил исходный пост. –