如何调用文本文件作为命令列表

如何调用文本文件作为命令列表

问题:多个 recup_dir 文件夹中的 245,000 多个文件(photo_rec 运行的输出)需要移动到集中文件夹以进行进一步的恢复操作。所有文件都是 *.jpg 文件。

我有一个名为 newlist1.txt 的文本文件,我已将其格式化为以下 4 种方式。要更改为每种方式,一个好的查找/替换编辑器必不可少。这些脚本文件位于文件夹 /disks/Keep/new-s1-recov 中。我知道,我本可以只使用 . 来指示文件的位置,但最初,脚本位于另一个文件夹中,句点不够用。

  1. echo !(recov1/recup_dir.1033/f340010.jpg)| xargs mv -t /disks/Keep/new-s1-recov

  2. echo !recov1/recup_dir.1034/f3442050jpg| xargs mv -t /disks/Keep/new-s1-recov

  3. echo recov1/recup_dir.1034/f344208.jpg| xargs mv -t /disks/Keep/new-s1-recov

  4. ls recov1/recup_dir.1034/f344208.jpg| xargs mv -t /disks/Keep/new-s1-recov

最后两个示例 3 和 4 在从命令行执行时可以正常工作。当我输入

sh newlist1.txt

或者

bash newlist1.txt

问题是,我有超过 245000 个文件需要移动。为什么我不使用文件管理器一次移动几百个文件呢?因为文件管理器可能是 Ubuntu 16.04.3 中最糟糕的软件。因此,命令行是完成此任务的首选方式。如果我花了几天时间弄清楚如何以这种方式完成它,我会认为这是值得的。我在文件管理器上浪费了更多时间,等待屏幕从看似茫然的状态中恢复过来,最终显示几个文件的移动终于完成了。

上面的格式取自我在不同时间找到的其他示例。我尝试将我的问题改编为其他人的解决方案。

因此,问题是:如何格式化 245000 行(使用具有查找/替换功能的 nano 文本编辑器,无需向 gedit 添加其他软件)并将其放入可以通过任何命令调用的文件中,这样 Ubuntu 就不会给我“太多参数”并死机。它将每一行作为命令提交,完成后,它将执行下一行,依此类推,直到完成。

答案1

由于 245,000 个文件名可能无法在命令行上容纳,因此请使用findxargs( man find;man xargs),然后执行以下操作:

find recov1/ -type f -iname '*.jpg' -print0 | \
    xargs -0 --no-run-if-empty mv -t /disks/Keep/new-s1-recov

如果文件名包含空格,我总是使用find ... -print0和。如果失败,您可能需要使用开关或。您也可以替换进行测试。xargs -0xarg--max-args=--max-chars=xargsmvecho mv

相关内容