2013-05-13 3 views
0

У меня есть эта строка здесь 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 

ответ

1

Одним из вариантов может быть использовать встроенный логический или (из находят человека странице):

expr1 -o expr2 
      Or; expr2 is not evaluated if expr1 is true. 

Так что в вашем случае вы можете do:

find "$directory" -name '*.c' -o -name '*.sh' 
+0

О, хорошо, поэтому, если бы я хотел сделать больше, чем просто 2 расширения, мог бы я просто добавлять '-o '* .txt' -o '* .jpg'' и т. д.? – Hokerie

+0

Точно. Вы также можете использовать логическое и (или отрицание), чтобы быть более конкретным, и принудительно использовать приоритет, используя круглые скобки (но не забывайте избегать их из bash). –

+0

Извините, я просто понял, что оригинальное сообщение было неправильным. Вам нужно добавить -name "* .c" -o -name "* .sh" -o -name "* .. jpg" и т. Д. Исправил исходный пост. –

Смежные вопросы