我有一个脚本可以将文件类型移动.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