移动文件夹(如果文件夹或其子文件夹包含特定文件)(bash)

移动文件夹(如果文件夹或其子文件夹包含特定文件)(bash),bash,ubuntu,unix,Bash,Ubuntu,Unix,我不熟悉bash脚本和stackoverflow(第一个问题)。我试图做一件相当简单的事情,但不知何故我没有得到我想要的(尝试使用来自不同线程的一些解决方案,但没有运气)。也许你能帮我一个简单的解决办法 我的任务:在不同的文件夹(某些主文件夹)中查找名为log.txt的文件。如果找到,则将相关文件夹移动到另一个位置(它是一个备份文件夹…log.txt表示此文件夹需要备份)。在下面的布局中,我希望mv folder3及其所有内容 -Main --folder1 ---subfolder

我不熟悉bash脚本和stackoverflow(第一个问题)。我试图做一件相当简单的事情,但不知何故我没有得到我想要的(尝试使用来自不同线程的一些解决方案,但没有运气)。也许你能帮我一个简单的解决办法

我的任务:在不同的文件夹(某些主文件夹)中查找名为log.txt的文件。如果找到,则将相关文件夹移动到另一个位置(它是一个备份文件夹…log.txt表示此文件夹需要备份)。在下面的布局中,我希望mv folder3及其所有内容

-Main
--folder1   
  ---subfolder
--folder2
  ---Subfolder2
--folder3   
   --Subfolder3
        --log.txt

#!/bin/bash
MAIN=$(find /home/rwo/Desktop/FROM/* -maxdepth 0 -type d)
for FOLDER in $MAIN; do
        if 
            find $FOLDER -maxdepth 0 -type f -name "log.txt" 
                then
                    mv $FOLDER /home/rwo/Desktop/TO

        fi
done
在上述情况下,收件人文件夹(TO)最终接收子文件夹1、子文件夹2和子文件夹3(以及log.txt)。我做错了什么


使用
find
bash

#/usr/bin/env bash
而IFS=read-r文件;做
file=${file%/*}
echo mv-v“${file%/*}”/home/rwo/Desktop/TO

完成了<
find
已经有了
-regex
-你可以匹配
log.txt
hmm,你介意告诉我如何使用它吗(在上面的上下文中)。我从来没有使用过-regex,而且我也没有发现易于理解的语法
find
返回“success”(退出状态0),即使没有找到任何文件,因此您的代码将始终执行
then
子句。我明白了这一点(如果我只是删除echo,并按照第一个问题所示定义主变量):mv:无法将“/home/rwo/Desktop/FROM/B/subfolder”移动到“home/rwo/Desktop/to”:没有这样的文件或目录我发布了脚本正在执行的操作的示例,也许您可以在某个空目录中跟踪它以查看发生了什么。另外,我认为在目标目录中需要一个前导的
/
。e、 g.
/home/rwo/Desktop/TO
@Sumsarium,但目录名中没有前导的
/
,这意味着它是Windows term.Awesome中的当前工作目录或文件夹。它几乎解决了我的任务,只是移动了“子文件夹3”。我还想移动folder3。如果我需要快速解决这个问题?我保证会仔细阅读参数扩展。将
file=${file%/*}
添加到
do
所在行的正下方,不要删除回显,这样您就可以看到这是否是您想要的。
mkdir -p Main/folder{1..3}
mkdir -p Main/folder1/subfolder
mkdir -p Main/folder2/subfolder2
mkdir -p Main/folder3/subfolder3
touch Main/folder3/subfolder3/log.txt