У меня есть папка с именем 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
Используя a 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
Настроенный монтируют событие устройства:
Создайте a .rule
файл:
KERNEL=="sd*", SUBSYSTEM=="block", ATTR{removable}=="1", ATTRS{serial}=="07083395757D2761", MODE="0777", RUN+="/home/me/mv.sh /home/me/Documents/Research/ /media/me/drive21/Documents/Research_Archive"
назовите это 90-move.rules
и место в /etc/udev/rules.d
каталог
Использовать udevadm info -a -n /dev/sd*
получить необходимую информацию о Вашем внешнем устройстве хранения.
Теперь вся потребность делает плагин Ваше устройство и после того как это определяется rule
набор, файлы должны быть перемещены. Настройте код к способу, которым он будет работать лучше всего на Вас.
Источник:
http://www.reactivated.net/writing_udev_rules.html
https://docs.oracle.com/cd/E37670_01/E41138/html/ch07s03.html
https://www.linux.com/news/udev-introduction-device-management-modern-linux-system