Вы можете сделать все это одновременно с помощью команды find:
find /usr -type d -name My\ Files -exec rsync -avR '{}' /iscsi \;
Для получения дополнительной информации man find
, прямо перед концом есть несколько примеров. В качестве альтернативы вы можете передать результаты с помощью утилиты xargs
.
Тебе следует изучить свои руководства более тщательно, здесь можно найти много сокровищ.
В сценарии bash вы также можете указать:
export MIVARIABLE=$(find /usr -type d -name My\ files)
, а затем
for i in $MIVARIABLE ;do
rsync -avR $i /iscsi;
done
Но это имеет недостатки среди них, если ваши результаты очень большие, они могут превышать максимальное текстовое пространство bash, доступное для переменной, и если найденные имена содержат пробелы, некоторые утилиты могут сойти с ума.
В современной системе максимальный размер переменной среды bash может составлять от 8 КБ до почти 2 МБ, если вы добавите слишком много информации о переменной, вы получите ошибку Argument list too long
.
Поэтому, если вам нужно перебрать список файлов / каталогов, лучше использовать встроенные функции find или в сотрудничестве с xargs
. Внимательно прочитайте их руководства и попробуйте некоторые пробные прогоны, используя вместо этого echo your_command_line
, чтобы вы приобрели соответствующий опыт и уверенность в работе коммунальных служб. Ищите функцию -print0
в find
, а также команду -0
в xargs
, которые разработаны, чтобы избежать некоторых проблем с именами файлов с пробелами и символами в их именах.
EDIT:
find
будет корректно обрабатывать пробелы с помощью оператора -exec:
find /usr -type d -name My\ Files -exec rsync -avR '{}' /iscsi \; -exec rm -rf '{}'\;
будет делать то, что вам нужно, один за другим. Я указывал варианты, чтобы вы могли решить, что лучше подходит для ваших нужд, я не хотел вас смущать.
Edit2:
find /usr -type d -name 'My Files' -exec rsync -avR '{}' /iscsi \; -exec rm -rf '{}'\;
funciona igual que el ejemplo de arriba. Cuando bash lee «Мои файлы», он занимает все слово вместе и по-разному не обрабатывает пробелы