Bash 命令列出 Linux 上特定目录和子目录的名称

问题描述 投票:0回答:1

我需要一个bash命令,在目录“rawdata”中搜索名称以“AB”开头的所有子目录,在所有这些子目录中搜索子目录“demo”,并在所有“demo”目录中搜索名称仅由数字组成的所有子目录。从所有这些中,我需要以“.txt”为扩展名的文件名。该命令总是必须只查看一个深度而不是更深层次的搜索...我尝试在“test.txt”中写入所有找到的文件名,但我的代码无法正常工作。

我的做法:

find rawdata/AB* -type d -name 'demo' -exec find {} -mindepth 1 -maxdepth 1 -type d -regex '.*/[0-9]+' -exec find {} -mindepth 1 -maxdepth 1 -type f -name "*.txt" {} \; | awk -F/ '{print $NF}' > test.txt

我收到这样的错误消息:

‘rawdata/AB.../q.../A.../demultiplexed’: No such file or directory

对我来说,这证明它不会首先搜索 demo,因为它采用了子目录 q...此外,它并没有采用以数字作为名称的文件夹!

正确的路径应该是这样的:

‘rawdata/AB.../demo/123/hereAndJustInThisLevelHereIsTheSearchedFile.txt’
因此,在每个第一个目录级别上必须有“rawdata”顺序,在第二个级别上它应该只检查名称以“AB”开头的目录,在第三个级别上只有一个“demo”,它应该只检查这个在第四级中,它必须仅检查所有以数字作为文件夹名称的目录!

我已经尝试过其他一些类似的代码版本,但没有一个给我正确的结果。

linux bash shell find sh
1个回答
0
投票

我需要一个 bash 命令来搜索文件夹“rawdata”

find 'rawdata' -maxdepth 1

所有子文件夹名称以“AB”开头,

find 'rawdata' -maxdepth 1 -type d -name 'AB*'

在所有此命令中搜索 子文件夹“演示”

while IFS= read -r dir1; do
    find "$dir1" -maxdepth 1 -type d -name 'demo'
done < <(find 'rawdata' -type d -name 'AB*')

在“demo”文件夹中所有具有名称的子文件夹 仅由数字组成。

while IFS= read -r dir1; do
    while IFS= read -r dir2; done
        find "$dir2" -maxdepth 1 -type d -regex '.*/[0-9]+$'
    done < <(find "$dir1" -maxdepth 1 -type d -name 'demo')
done < <(find 'rawdata' -maxdepth 1 -type d -name 'AB*')

从所有以以下名称命名的文件夹中 一个数字,我需要以“.txt”结尾的文件名。

while IFS= read -r dir1; do
    while IFS= read -r dir2; done
        while IFS= read -r dir3; do
            find "$dir3" -maxdepth 1 -type f -name '*.txt'
        done < <(find "$dir2" -maxdepth 1 -type d -regex '.*/[0-9]*$')
    done < <(find "$dir1" -maxdepth 1 -type d -name 'demo')
done < <(find 'rawdata' -maxdepth 1 -type d -name 'AB*')

它可能需要一些调整才能 100% 正确,但你明白了 - 按摩以适应。

© www.soinside.com 2019 - 2024. All rights reserved.