将文件从文件夹及其子文件夹移动到同一目标文件夹

将文件从文件夹及其子文件夹移动到同一目标文件夹

我有一个脚本可以将文件类型移动.txt到特定文件夹。它在工作文件夹中查找文件并将其移动到完成的文件夹中。

例如,如果.txt文件夹/tmp/swan/test/work和 文件夹 中有一个文件/tmp/swan/test11/work,则这些文件应分别移动到/tmp/swan/test/completed/tmp/swan/test11/completed

.txt另外,如果子文件夹中有这样的文件/tmp/swan/test11/work/APX也应该移动到/tmp/swan/test11/completed.

下面是我的脚本。现在脚本正在正确地从工作文件夹中移动文件,但它没有将文件从子文件夹(即从工作/已完成文件夹)移动到相应的完成文件夹。

#!/bin/bash

MY_DIR=/tmp/swan

cd $MY_DIR
find . -path "*work*"  -iname "*.txt" -type f -execdir mv '{}' ../completed \;

答案1

假设

  • 不是嵌套的工作目录
  • 没有有趣的名字

尝试

MY_DIR=/tmp/swan

cd $MY_DIR

for w in */work 
do 
  find $w -path "*work*"  -iname "*.txt" -type f -execdir mv '{}' $MY_DIR/$w/completed \;
done

这会将您的文件传输到名为“completed”的第四级目录,其第三个名称与“work”相同。

如果工作目录未嵌套但处于任意级别

MY_DIR=/tmp/swan

cd $MY_DIR

find $MY_DIR -type d -name \*work\* -print | while read w 
do 
  find $w -path "*work*"  -iname "*.txt" -type f -execdir mv '{}' $MY_DIR/$w/completed \;
done

相关内容