gpt4 book ai didi

linux - Bash循环遍历包括隐藏文件的目录

转载 作者:IT王子 更新时间:2023-10-29 01:05:48 26 4
gpt4 key购买 nike

我正在寻找一种方法,在 bash 中对我的目录包含的所有内容(即文件、目录和链接,包括隐藏的链接)进行简单循环。

如果它可以专门用在 bash 中,我会更喜欢,但它必须是最通用的。当然,文件名(和目录名)可以有空格、换行符、符号。除了“/”和 ASCII NULL (0×0) 之外的所有内容,即使是第一个字符。此外,结果应排除“。”和“..”目录。

这是循环必须处理的文件生成器:

#!/bin/bash
mkdir -p test
cd test
touch A 1 ! "hello world" \$\"sym.dat .hidden " start with space" $'\n start with a newline'
mkdir -p ". hidden with space" $'My Personal\nDirectory'

所以我的循环应该看起来像(但必须处理上面棘手的事情):

for i in * ;
echo ">$i<"
done

我最接近的尝试是使用 ls 和 bash 数组,但它不起作用,是:

IFS=$(echo -en "\n\b")
l=( $(ls -A .) )
for i in ${l[@]} ; do
echo ">$i<"
done
unset IFS

或者使用 bash 数组但不排除“..”目录:

IFS=$(echo -en "\n\b")
l=( [[:print:]]* .[[:print:]]* )
for i in ${l[@]} ; do
echo ">$i<"
done
unset IFS

最佳答案

* 不匹配以 . 开头的文件,所以你只需要明确:

for i in * .[^.]*; do
echo ">$i<"
done

.[^.]* 将匹配以 . 开头的所有文件和目录,后跟一个非 . 字符,然后是零个或多个字符。换句话说,它类似于更简单的 .*,但不包括 ...。如果您需要匹配类似 ..foo 的东西,那么您可以将 ..?* 添加到模式列表中。

关于linux - Bash循环遍历包括隐藏文件的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26381807/

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