У меня есть папка с именем Research (которая также включает вложенные папки).
Я хочу регулярно перемещать файлы из Research, которые больше 6 месяцев, в другую папку, называемую Research_Archive, который находится на другом диске. Файлы> 6 месяцев будут удалены из Research. Папка Research_Archive воспроизведет структуру подпапок Research.
Сценарий будет запускаться периодически, поэтому Research_Archive будет обновлен.
Я видел такой скрипт:
find . -type f -mtime +5 -print0 | while IFS= read -r -d '' file; do
dir="${file%/*}"
mkdir -p ../rootarchive/"$dir"
mv "$file" ../rootarchive/"$file"
done
Но, будучи новичком в сценарии, я полностью смущен его относительными путями. Например, мой исходный путь: /home/me/Documents/Research/, а пункт назначения будет: /media/me/drive21/Documents/Research_Archive/.
И я не уверен, что если вы запускаете вышеупомянутый скрипт более одного раза, снова воссоздает папку Research_Archive , И как будут устанавливаться разрешения в папке Research_Archive (когда я пробовал тестирование, я был заблокирован из просмотра ящика представления созданной папки).
Любые примеры помощи / конкретных примеров будут оценены.
Этот сценарий должен помочь в этом отношении:
#!/bin/bash
from=$1
destination=$2
if [[ -d "$from" && -s "$from" ]]; then
# extract the name of the sub directory
# to be create
src=$(sed -r 's/.*\/(Research).*/\1/' <<< "$from")
if [[ -d /media/me/drive21/Documents/Research_Archive/ ]]; then
destination=/media/me/drive21/Documents/Research_Archive/
if [[ ! -d "$destination/$src" ]]; then
mkdir "$destination/$src"
newdes="$destination/$src"
find "$from" -type f -mtime +5 -print0 -exec mv {} "$newdes" \;
else
cd "$destination"
find "$from" -type f -mtime +5 -print0 -exec mv {} "$newdes" \;
fi
else
exit 1
fi
else
exit 1
fi
Использование:
chmod +x mv.sh
./mv.sh /home/me/Documents/Research/ /media/me/drive21/Documents/Research_Archive
Использование правила udev для автоматизации перемещения файлов во внешнее хранилище:
Измените код для работы с этой установкой: #!/bin/bash
from=$1
destination=$2
if [[ -d "$from" && -s "$from" ]]; then
# extract the name of the sub directory
# to be create
src=$(sed -r 's/.*\/(arch).*/\1/' <<< "$from")
if [[ -d "/media/me/drive21/Documents/Research_Archive/" ]];then
destination="/media/me/drive21/Documents/Research_Archive/"
if [[ ! -d "$destination/$src" ]]; then
cd "$destination"
mkdir "$src"
find "$from" -type f -mtime -5 -exec mv {} "$src" \;
else
cd "$destination"
find "$from" -type f -mtime -5 -exec mv {} "$src" \;
fi
else
exit 1
fi
else
exit 1
fi
Измените код для работы с этой настройкой: Теперь все, что вам нужно сделать, это подключить ваше устройство и как только он идентифицируется набором rule, файлы должны быть перемещены. Пожалуйста, настройте код так, как он будет работать лучше всего для вас. Источник:
http://www.reactivated.net/writing_udev_rules.html
http://www.reactivated.net/writing_udev_rules .html
https://wiki.debian.org/udev
https://wiki.debian.org/udev [ ! d27]
Этот сценарий должен помочь в этом отношении:
#!/bin/bash
from=$1
destination=$2
if [[ -d "$from" && -s "$from" ]]; then
# extract the name of the sub directory
# to be create
src=$(sed -r 's/.*\/(Research).*/\1/' <<< "$from")
if [[ -d /media/me/drive21/Documents/Research_Archive/ ]]; then
destination=/media/me/drive21/Documents/Research_Archive/
if [[ ! -d "$destination/$src" ]]; then
mkdir "$destination/$src"
newdes="$destination/$src"
find "$from" -type f -mtime +5 -print0 -exec mv {} "$newdes" \;
else
cd "$destination"
find "$from" -type f -mtime +5 -print0 -exec mv {} "$newdes" \;
fi
else
exit 1
fi
else
exit 1
fi
Использование:
chmod +x mv.sh
./mv.sh /home/me/Documents/Research/ /media/me/drive21/Documents/Research_Archive
Использование правила udev для автоматизации перемещения файлов во внешнее хранилище:
Измените код для работы с этой установкой: #!/bin/bash
from=$1
destination=$2
if [[ -d "$from" && -s "$from" ]]; then
# extract the name of the sub directory
# to be create
src=$(sed -r 's/.*\/(arch).*/\1/' <<< "$from")
if [[ -d "/media/me/drive21/Documents/Research_Archive/" ]];then
destination="/media/me/drive21/Documents/Research_Archive/"
if [[ ! -d "$destination/$src" ]]; then
cd "$destination"
mkdir "$src"
find "$from" -type f -mtime -5 -exec mv {} "$src" \;
else
cd "$destination"
find "$from" -type f -mtime -5 -exec mv {} "$src" \;
fi
else
exit 1
fi
else
exit 1
fi
Измените код для работы с этой настройкой: Теперь все, что вам нужно сделать, это подключить ваше устройство и как только он идентифицируется набором rule, файлы должны быть перемещены. Пожалуйста, настройте код так, как он будет работать лучше всего для вас. Источник:
http://www.reactivated.net/writing_udev_rules.html
http://www.reactivated.net/writing_udev_rules .html
https://wiki.debian.org/udev
https://wiki.debian.org/udev [ ! d27]