我有一个文件列表文件夹A:
- Chapter1_en.md
- Chapter2_en.md
- Chapter3_en.md
我有一个目标文件夹B带有子文件夹(a、b、c、d 等。文件夹名称是任意的):
- 文件夹B
- A
- Chapter1_en.md
- 乙
- 无关.md
- C
- Chapter2_en.md
- d
- 其他文件.md
- e
- Chapter3_en.md
- A
我想做的事:
- 对于每个文件文件夹A
- 找到子文件夹文件夹B其中包含一个同名文件
- 文件夹A/chapter1_cn.md -> 文件夹B/a/chapter1_cn.md
- 文件夹A/chapter2_en.md -> 文件夹B/c/chapter2_en.md
- 如果找到则复制(覆盖)目标中的文件
linux 命令行上有没有办法用(一行)命令来实现它?
我的用例是一个翻译用例,我最初收集了要从多个子文件夹翻译到单个文件夹中的文件。从翻译器那里取回它们后,我想将文件分发回其原始位置。就我而言,我可以确保文件名是唯一的,但只是分散在不同的文件夹中,不遵循任何命名约定。
答案1
这linux命令行不是你想的那样。 Linux 只是一个内核,位于许多类 Unix 和非类 Unix 操作系统的核心。
我们所说的命令行是采用许多面向行的通常交互式编程语言或工具的语法的代码。例如,您可以有一个nslookup
用于输入 DNS 查询的命令行、一个gdb
用于操作的命令行gdb
,或者一个 shell 命令行,您可以通过该命令行运行带参数的命令以及重定向或连接到其他命令的输入/输出。
Linux 内核本身也有命令行。这是引导加载程序在启动时传递给它的指令列表。您会在 中找到它的内容/proc/cmdline
,但这在这里没有用。
许多编程语言,无论是否基于行,都可以复制文件,但编程问题大多超出了 unix.stackexchange.com 的范围(它们将位于 stackoverflow.com 姊妹网站上,该问题是从该网站迁移而来的)。
不过 Unix shell 也在范围内。您可以通过使文件调用复制命令(例如cp
、pax
、 rsync
等)来复制其中的文件。
这些 Unix shell 之一是zsh
在 中zsh
,您可以执行以下操作:
for src (A/*(N.)) for dst (B/*/$src:t(N.)) cp $src $dst
哪个循环常规的(使用.
glob 限定符) 中的文件,并且对于其子目录中具有相同名称(的 ail )且也是常规的A
每个文件,将其复制过来。B
t
$src