gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:09:01 25 4
gpt4 key购买 nike

我是 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) 最终会收到 Subfolder1、Subfolder2 和 Subfolder3(以及 log.txt)。我究竟做错了什么?

提前致谢

最佳答案

findbash

#!/usr/bin/env bash

while IFS= read -r file; do
file=${file%/*}
echo mv -v "${file%/*}" /home/rwo/Desktop/TO
done < <(find main -type f -name 'log.txt')
echo是否可以向您展示将要发生的事情,如果您认为输出正常,请将其删除。

一个简单的模拟
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

创建目标目录

mkdir -p home/rwo/Desktop/TO

检查主目录中的内容。

tree Main

输出

Main
├── folder1
│   └── subfolder
├── folder2
│   └── subfolder2
└── folder3
└── subfolder3
└── log.txt

6 directories, 1 file

现在脚本匹配主要

#!/usr/bin/env bash

while IFS= read -r file; do
file=${file%/*}
echo mv -v "${file%/*}" home/rwo/Desktop/TO
done < <(find Main -type f -name 'log.txt')

输出

mv -v Main/folder3/ home/rwo/Desktop/TO

删除 echo将输出

renamed 'Main/folder3/' -> 'home/rwo/Desktop/TO/folder3'
"${file%/*}"Parameter Expansion 的形式这基本上删除了最后一个 /
例如 find main -type f -name 'log.txt' 的输出

main/folder3/subfolder3/log.txt

删除最后一个 /带参数扩展将只留下路径名

main/folder3/subfolder3/

应用另一个参数扩展来删除最后一个 /将导致

main/folder3/

然后把它喂给 mv作为 while read 中的参数环形。
<()被称为 Process Substituion
IFS=禁用内置 read 的默认功能删除尾随和前导空格。

看看 howto read a file or stream in bash了解 while read发布的循环。

关于bash - 如果文件夹或其子文件夹包含特定文件(bash),则移动文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61687640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com