piapia123
zh

文件操作命令生成器(cp / mv / rsync / scp)

网络

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

这四个命令的选项互不通用,而「某个选项在这个命令上根本不存在」正是最容易踩的坑:`mv` 没有 `-p`、`cp` 没有干跑、`--exclude` 只有 rsync 认。这个工具按你选的命令只放上真正存在的开关,并把被丢掉的选项明说出来,而不是悄悄忽略。路径处理是另一半价值:含空格的路径会被逐个加上引号(不是整串套一层,那会把两个文件变成一个不存在的文件名),而 `*.log` 这样的通配则保持不加引号,留给 shell 展开。 命令在你的浏览器里拼出来,不联网、不上传路径。

功能

  • 四种命令:cp、mv、rsync、scp
  • 输入第一行是源,其后每行一个目标
  • 含空格的路径逐个加引号,不会整串套一层
  • 通配符(*.log)保持不加引号,留给 shell 展开
  • rsync 专属的 -n 干跑与 --exclude 排除
  • 该命令不支持的选项会明说,而不是默默丢掉
  • mv 覆盖不可撤销等风险单独提醒
  • 全部本地完成,不联网

使用方法

  1. 第一行填源路径,后面每行填一个目标
  2. 选命令,并勾选需要的选项
  3. 远端目标填成 user@host:/path
  4. 复制生成的命令与选项说明

常见问题

为什么路径要加引号,加在哪里?
因为 shell 用空格分隔参数,`my file.txt` 不加引号会被当成两个参数。正确做法是给每个含空格的路径单独加引号,得到 `cp "my file.txt" out/`。反过来,把整串路径套一层引号(`cp "a.txt b.txt"`)会把它们变成一个文件名 —— 这是同一个问题的另一种错法。所以这个工具逐条判断,哪个需要就加哪个。
为什么 mv 勾了递归却没有 -r?
因为 `mv` 本身就是递归的 —— 移动一个目录会连内容一起移动,它根本不认 `-r`。同样地,`mv` 也没有 `-p`:移动只是改目录项,本来就不改变权限与时间戳。所以这两个选项在 mv 上不生成参数,只给出说明。
rsync 和 cp 该用哪个?
本地一次性复制用 `cp` 就够了。要增量同步(只传变化的文件)、要排除一批文件、要传到远端、或者想先用 `-n` 干跑看看会做什么,就用 `rsync`。`scp` 是 rsync 不可用时的简单替代,但它不能增量、不能排除。
为什么 cp 没有干跑?
因为 `cp` 与 `mv` 都没有干跑选项,`scp` 也没有。想先预览会动到哪些文件,可以用 `rsync -n`(它的选项集最完整),或者把目标换成临时目录先跑一遍。这个工具在你勾选干跑而命令不支持时,会直接把这条限制写进结果。

相关工具