将两个特定文件移动到具有唯一名称的多个目录中的父文件夹中

将两个特定文件移动到具有唯一名称的多个目录中的父文件夹中

我需要移动两个特定的文件,我们将它们分别称为 fileA.txt 和 fileB.sh,移动到其父文件夹中。

其中一个文件是通用的,但另一个文件特定于其父文件夹,不能复制到所有文件夹。

文件夹层次结构如下:文件夹层次结构

父文件夹是唯一的,必须保持不变。总共有超过 2000 个文件夹,位于包含子文件夹的 200-300 个父文件夹的子文件夹中

到目前为止,BASH 中不起作用的是:

find -maxdepth 4 -type f -name ‘*.bb’ ‘*.txt’; mv ../.

我对编写脚本非常陌生,我知道这是一项非常简单的任务。我很抱歉画得很糟糕,但我已经撞墙太久了。

答案1

要将任何名为fileA.txt或 的文件移动fileB.txt到其直接父目录:

find . -maxdepth 4 -type f -name 'file[AB].txt' -execdir mv {} ../ \;

或者,将任何名为fileA.txt或 的文件移动fileB.bb到其直接父目录:

find . -maxdepth 4 -type f \( -name 'fileA.txt' -o -name 'fileB.bb' \) -execdir mv {} ../ \;

怎么运行的

  • .告诉find从当前目录开始。(您可以将其替换为您喜欢的任何目录。

  • -maxdepth 4告诉find不要深入目录结构超过四级。

  • -type f 告诉find仅查找常规文件。

  • -name 'file[AB].txt'告诉find仅查找与 glob 匹配的文件file[AB].txt

    或者,为了匹配fileA.txtfileB.bb,我们使用两个-name测试结合逻辑或 ( -o) 并用括号组合在一起:

    \( -name 'fileA.txt' -o -name 'fileB.bb' \)
    
  • -execdir mv {} ../ \;告诉findchdir 到文件的目录并运行 shell 命令,mv {} ../其中find将替换{}为文件的实际名称。该表达式../是 Unix 语言中对父目录的表达。尾随\;仅标记findshell 命令的结束

相关内容