You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将文本文件作为命令列表调用?批量迁移photo_rec恢复的JPG文件

如何将文本文件作为命令列表执行(批量迁移PhotoRec恢复的图片)

针对你要迁移245000+张PhotoRec恢复的JPG文件的需求,既然已经把命令整理成了newlist1.txt,下面给你几种直接调用这个命令列表的实用方法,操作都很简单:

方法1:直接用Shell解释器执行文件

这是最直接的方式,只要你的newlist1.txt里每行都是完整的可执行命令(比如mv /disks/Keep/new-s1-recov/recup_dir_01/*.jpg .这类),先切换到脚本所在目录:

cd /disks/Keep/new-s1-recov

然后用bash或者sh直接运行这个文本文件:

bash newlist1.txt
# 或者用sh(如果是POSIX兼容的命令)
sh newlist1.txt

这种方式会开启一个子shell执行所有命令,不会污染当前shell的环境变量,很安全。

方法2:在当前Shell中执行命令列表

如果你需要命令在当前shell环境下执行(比如依赖当前目录、环境变量等),可以用source命令或者它的简写.:

cd /disks/Keep/new-s1-recov
# 两种写法效果一样
source newlist1.txt
# 或者
. newlist1.txt

不过对于批量移动文件的场景,两种方法差别不大,选顺手的就行。

方法3:用xargs批量执行(适合命令格式特殊的情况)

如果你的命令列表是每行一个命令片段(比如只有目标路径),可以用xargs来拼接执行,但如果是完整命令的话,写法会稍微复杂一点:

xargs -I {} sh -c {} < newlist1.txt

不过这种方法不如前两种直接,一般推荐前两种。

重要注意事项

  1. 先测试命令正确性:在正式执行前,建议把newlist1.txt里的mv改成echo mv,先运行一遍看看输出的命令是否符合预期,避免误移动文件。
  2. 处理命令行参数过长问题:因为你有24万+文件,如果命令里用*.jpg通配所有文件,可能会触发"argument list too long"错误。如果遇到这种情况,建议把文件里的命令改成用find来批量处理,比如:
    find recup_dir_* -type f -name "*.jpg" -exec mv {} . \;
    
    或者更高效的写法(减少进程创建次数):
    find recup_dir_* -type f -name "*.jpg" -exec mv {} . +
    
  3. 后台执行并记录日志:因为文件数量极大,执行时间会很长,建议用nohup后台运行,同时记录日志方便排查问题:
    nohup bash newlist1.txt > migrate_log.txt 2>&1 &
    
    之后可以用tail -f migrate_log.txt查看实时进度。

内容的提问来源于stack exchange,提问作者Hal Hackney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:45:02