AIX:查找名称包含特定字符串的文件并将其添加到列表中

Posted

技术标签:

【中文标题】AIX:查找名称包含特定字符串的文件并将其添加到列表中【英文标题】:AIX: Find Files with name containing specific string and add those to a list 【发布时间】:2019-04-28 13:32:44 【问题描述】:

我们需要在目录中查找名称包含特定字符串的文件并将它们添加到列表中。

假设我们在包含字符串ABC的特定目录中创建包含文件名的列表。

试过这个:

file_list=()
str="ABC"
while IFS= read -d $'\0' -r file ; do
file_list=("$file_list[@]" "$file")
done < <(find . -name "*$str*" -print0)
echo "Files getting appended: $file_list[@]"

如果目录包含文件:

ABC.txt, ABCD.txt, XYZ.txt, WXYZ.txt

那么上述sn-p的预期输出应该是:

Files getting appended: ABC.txt ABCD.txt

在 AIX 中获取错误消息:

find: 0652-017 -print0 is not a valid option.

有一篇适用于 Linux 的相关帖子,但在 AIX 中没有运气。

任何帮助都会得到真正的赞赏!

【问题讨论】:

【参考方案1】:

确实,AIX!find 不支持-print0。试试这样的:

#!/usr/local/bin/bash

file_list=()

touch xABCy
touch 'x ABC y'

str="ABC"

while IFS='\n' read -r file ; do
    file_list+=("$file")
done < <(find . -name "*$str*")

for i in "$file_list[@]"; do
    printf '\"%s\"\n' "$i"
done

结果:

"./x ABC y"
"./xABCy"

【讨论】:

将结果收集到一个散列中以便循环遍历散列有点有趣。只需在第一个循环中打印,不要收集值。 当然,第二个循环仅用于调试:它证明文件名和空格被正确处理。实际的脚本应该使用file_list 做一些实际的工作 我指出这一点是因为不必要地将事物收集到变量中是一种常见的反模式。如果你不需要随机访问(回去看看你收集了多少,比较文件名 m*n,跳过两个等)你不想要或不需要一个数组。

以上是关于AIX:查找名称包含特定字符串的文件并将其添加到列表中的主要内容,如果未能解决你的问题,请参考以下文章

遍历文件夹内的特定子文件夹并删除包含特定名称的文件 - AIX

Bash:查找包含特定字符串的文件并将它们复制到文件夹中

查找并打印出字符串中特定字符的出现次数 (shell/AIX)

查找名称包含特定字符串的列

XPath 表达式查找标签名称包含“名称”的元素

查找名称包含固定列中特定值的列