Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

文件重定向 V4.0

自动把指定目录下的文件转移、复制或挂载到另一个目录


工具介绍

本工具是一款用来自动转移文件的Magisk模块,拥有白名单、拦截系统文件、中文日志等特点,下简称「本模块」。

本模块适用的Magisk版本为20.4以上,另外,在Magisk 28001及以上版本,还可以开启action脚本,通过Magisk管理器UI来快速控制模块启用状态。

你可以使用终端执行:magisk -V来查看你的Magisk版本号。


特点

白名单

你可以在配置文件里自定义白名单文件列表,本模块会保证你的白名单文件不被移动。

拦截系统文件

本模块设计了三种系统文件拦截方案:

  1. 屏蔽所有系统目录与Android软件目录

  2. 屏蔽所有所有者为0-10000的目录

  3. 屏蔽所有权限被设置为-644以下的文件

当你不小心把目录设置到系统目录时,不必担心,本模块会拦截这些请求。

中文日志

本模块产生的所有日志均使用中文编写,出现错误时可以快速定位问题并修改。


快速上手

💡以下操作均使用Magisk最新正式版作演示,其他框架及版本的流程不一定完全相同。

本模块的安装与配置十分简单,只需要进行简单的操作即可开始使用。

安装

  1. 打开你的Magisk管理器,切换至「模块」页面,点击「从本地安装」,选择本模块的zip安装包。

  2. 在安装过程中,本模块会询问你是否需要创建用于体验的测试目录,测试目录的目录结构如下:

/sdcard/测试目录
├── 测试源目录A
├── 测试源目录B
├── 测试终目录A
└── 测试终目录B
  1. 您在「测试源目录A/B」下所产生的子目录与文件,都会默认以move模式被转移到「测试终目录A/B」。关于模式与原理,参见下方内容。

  2. 若你的Magisk版本号大于或等于28001,本模块会为你开启action.sh脚本,届时你可以通过Magisk模块页的「操作」键来控制本模块的状态。

系统配置

在开始之前,你可以先配置好系统的一些基本设置,配置文件位于/data/adb/module/FileHelper/config/SYSTEM/config.prop,内含详细说明。

工作目录配置

本模块目前提供了两种配置方法,都很简单易懂,接下来按照从易到难依次为您介绍。

配置方法一:Shell脚本

本模块的安装目录/config/OPDIR/config/OPDIR下,我提供了一个配置脚本「SETTING.sh」,使用常见的终端执行,即可轻松地进行配置。

本模块的安装目录在Magisk中一般为/data/adb/modules/FileHelper,其余情况请自行查找资料。

配置方法二:手动创建或修改文件

在Magisk中,本模块的操作目录配置文件位于/data/adb/modules/FileHelper/config/OPDIR/confs,打开这个目录,这里就是配置文件的「容器」。

容器内的每一个以自然数顺序(不包括0)命名的文件,被称为「项目配置」。

如果你在安装本模块时选择了「生成体验目录」,那么你可以在容器内找到两个已经做好的项目配置「1」和「2」。

💡无论什么时候,容器内的配置文件必须以自然数顺序来命名。比如,已经有了配置「1」和「2」,才可以创建「3」。

每个配置文件内都有三行配置项,分别为「SDIR」、「TDIR」和「MODE」,这三项被称为一组配置:

SDIR="/sdcard/测试目录/测试源目录A"
TDIR="/sdcard/测试目录/测试终目录A"
MODE="move"

它们的意思以及填写规范如下:

简称      SDIR
全称      Source Directory
类型      目录路径
意义      此项目的源目录。除了白名单文件和更改中的文件*以外,所有被存放到源目录的文件都会被复制或转移到终目录。
填写规范   SDIR="<目录路径,最后不加斜杠>"

简称      TDIR
全称      Target Directory
类型      目录路径
意义      此项目的目标目录,也叫终目录。
填写规范         EDIR="<目录路径,最后不加斜杠>"

简称      MODE
全称      Mode
类型      标志值
意义      此项目的操作模式,可以设定为copy, move或bind。
           - 此项为copy时:所有被存放到源目录的文件都会被复制到终目录。
           - 此项为move时:除了白名单文件和更改中的文件以外,所有被存放到源目录的文件都会被转移到终目录。
           - 此项为bind时:所有被存放到源目录的文件都会被同步挂载到终目录(源目录和终目录的修改会同步哦)。
填写规范   MODE="<move或copy,小写字母>"

💡每一个项目配置文件里有且只能有一组配置,否则会出现错误。

未来的配置方法:手机App

在不远的将来,我会为我的Magisk模块们开发一个专门用来管理的App,在上面,你可以以最可视化的方式进行编辑,敬请期待!


闲言碎语

接下来的内容属于我的一些想法和本模块的实现过程,普通用户可以不看。

点击展开/折叠

本模块结构

/data/adb/modules/FileHelper/
├── action.sh
├── config
│   ├── OPDIR
│   │   ├── SETTING.sh
│   │   └── confs
│   │       ├── 1
│   │       └── 2
│   └── SYSTEM
│       └── config.prop
├── module.prop
├── service.sh
├── service_running.log
├── uninstall.sh
└── yule
    ├── binarys
    ├── counter
    │   ├── all_copied_files
    │   ├── all_moved_files
    │   ├── all_skipped_files
    │   ├── copied_files
    │   ├── cycle_num
    │   ├── moved_files
    │   └── skipped_files
    ├── logarchive
    │   ├── service_running_20250117_022535_base.log
    │   └── service_running_20250117_042018_base.log
    ├── more
    │   ├── module.prop
    │   └── module.prop.head
    └── scripts
        ├── action.sh
        └── setvar.sh

数组

对于「可无限扩展项目数」这种需求,一般来说,使用数组时最优解,可以在仅有一个配置文件的情况下实现,配置文件的格式也十分简单,只需要在变量后加上[序号]就好了。

令我疑惑的是,我始终无法在Magisk的Shell环境中创建和使用数组,当我使用Var[@]时,Shell会error 1并提示左中括号使用错误。

经过一番寻找,了解到Magisk的Shell环境并非PATH中的任何一个sh,而是基于轻量版BusyBox的ash,这下破案了,ash就是不支持数组的啊!(╯°Д°)╯

啊这,那该咋办?

没关系,我又在另一个网站找到了解决方案,就是使用空格来模拟构建一个数组,并使用for来调用,如下:

my_array="num1 num2 num3 num4"
for num in $my_array ; do
    echo $num
done

输出结果:

num1
num2
num3
num4

嗯,不错,看起来是个完美的解决方案。但好像少了点什么?对,不能调用指定元素,这简直是个致命的短板QAQ

看来只能采取别的方式了,比如把文件当成一个项目,这样就能够通过find+wc的方式统计到项目数量,然后直接使用for循环就可以遍历所有项目,也可以直接使用source来调用指定项目。

嗯,这应该就是我当前技术力的最优解了。

About

自动让一个目录下的文件重定向到另一个目录的 Magisk 模块

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages