Я пытаюсь создать скрипт для перемещения файлов, помещенных в каталог, в подкаталог
Пример
Файлы, помещенные в, /home/userA/directory1
перемещаются в/home/userA/directory1/directory2
Мне приходится повторять это для всех users
нижеперечисленных пользователей /home
и пропускать их, если их directory2
не существует.
Мой сценарий на данный момент
#!/bin/bash
directory="/home/*/directory1"
directory2="/home/*/directory1/directory2/."
if [ $(ls -1A $directory | wc -l) -gt 0 ] ;
then
find $directory -type f -exec rsync --remove-source-files {} $directory2 \; &>/dev/null ;
fi
Проблема, с которой я столкнулся при использовании приведенного выше скрипта, заключается в том, что он перемещает все файлы в один из файлов directory2
.
решение1
Я предполагаю, что в домашнем каталоге некоторых ваших пользователей существует каталог с именем , d1
а внутри него — подкаталог с именем d2
.
Я полагаю, вы хотите сделать что-то похожее на
#!/bin/bash
for i in /home/*/d1 ; do
if [ -d "$i/d2" ]; then
# echo "$i/d2"
find "$i" -maxdepth 1 -type f -exec mv {} "$i/d2" \;
fi
done
Примечание:
- Если в настоящем названии
d1
есть пробелы, вам нужно больше заниматься спортом и защитить их с помощью\
(чтобы можно было написатьfor i in /home/*/directory\ with\ spaces; do
). - Попробуйте написать
echo $directory2 ; exit
свой предыдущий сценарий, и вы поймете, почему он ведет себя не так, как вы ожидаете. Подробнее оРасширение имени файла.