我有一个名为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
夹的权限(当我尝试测试时,我被锁定,无法查看创建的文件夹的视图文件管理器)。
任何帮助/具体例子都将不胜感激。
答案1
该脚本应该在这方面有所帮助:
#!/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
文件: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