gpt4 book ai didi

BASH 测试文件名是否以 .dylib 结尾

转载 作者:行者123 更新时间:2023-12-02 16:43:28 28 4
gpt4 key购买 nike

我正在遍历文件树以识别所有 .DYLIB 文件。

#!/bin/bash

#script to recursively travel a dir of n levels

function traverse() {
for file in "$1"/*
do
if [ ! -d "${file}" ] ; then
echo "${file} is a file"
else
echo "entering recursion with: ${file}"
traverse "${file}"
fi
done
}

function main() {
traverse "$1"
}

main "$1"

我想在打印“...是一个文件”之前测试文件名是否以 .DYLIB 结尾。我想我可能需要添加条件“if [ !-d "${file}"] ; then”,但我不确定。有没有办法在 bash 中做到这一点?

最佳答案

无需编写自己的递归函数。您可以使用 ** glob 递归查找所有 *.dylib 文件:

shopt -s globstar
ls "$1"/**/*.dylib

或者使用查找:

find "$1" -name '*.dylib'

要使用这些结果,我建议直接对它们进行循环。它避免用临时数组耗尽内存。

shopt -s globstar

for file in "$1"/**/*.dylib; do
echo "$file"
done

while IFS= read -rd '' file; do 
echo "$file"
done < <(find "$1" -name '*.dylib')

Is there a way I can store everything in a string array so that I can perform an operation on those .dylib files?

但是如果你确实想要一个数组,你可以这样写:

shopt -s globstar
files=("$1"/**/*.dylib)

readarray -td '' files < <(find "$1" -name '*.dylib')

然后遍历你要写的数组:

for file in "${files[@]}"; do
echo "$file"
done

关于BASH 测试文件名是否以 .dylib 结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61062767/

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