Скрипт Linux для перемещения файлов из нескольких каталогов

Скрипт Linux для перемещения файлов из нескольких каталогов

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

Связанный контент