我需要移动两个特定的文件,我们将它们分别称为 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.txt
或fileB.bb
,我们使用两个-name
测试结合逻辑或 (-o
) 并用括号组合在一起:\( -name 'fileA.txt' -o -name 'fileB.bb' \)
-execdir mv {} ../ \;
告诉find
chdir 到文件的目录并运行 shell 命令,mv {} ../
其中find
将替换{}
为文件的实际名称。该表达式../
是 Unix 语言中对父目录的表达。尾随\;
仅标记find
shell 命令的结束