Я пытаюсь создать сценарий для перемещения файлов, как только они помещены в каталог в подкаталог
пример
Файлы, помещенные в /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 ответ1

0

Я предполагаю, что в доме некоторых из ваших пользователей существует каталог с именем 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 предыдущего сценария, и вы поймете, почему он ведет себя не так, как вы ожидаете. Подробнее о расширении имени файла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .