gpt4 book ai didi

bash - 如何使脚本处理不同的文件?

转载 作者:可可西里 更新时间:2023-11-01 15:27:23 25 4
gpt4 key购买 nike

我有 2 个脚本。首先,start.sh 有这些行:

echo "-----------RUN copy mta-------------"
bash copy_file.sh mta $today_without_dash
echo "-----------RUN copy rcr-------------"
bash copy_file.sh rcr $today_without_dash
echo "-----------RUN copy sub-------------"
bash copy_file.sh sub $today_without_dash

启动copy_file.sh:

echo "remove old files "${1}
hadoop fs -rm -skipTrash /apps/hive/warehouse/database.db/project/file_${1}/*

for i in `hadoop fs -ls /user/files/${2}_C | egrep ${1}.gz | awk -F " " '{print $8}'`
do
hadoop fs -cp $i /apps/hive/warehouse/database.db/project/file_${1}
echo "copy file - "${i}
done

for i in `hadoop fs -ls /user/files/${2}_B | egrep ${1}.gz | awk -F " " '{print $8}'`
do
hadoop fs -cp $i /apps/hive/warehouse/database.db/project/file_${1}
echo "copy file - "${i}
done

问题是,我有很多这样的 ${2}_C 类型的文件夹,每个文件夹都以不同的字母结尾。如${2}_P${2}_F${2}_L等。我想知道是否有一种方法可以在一个循环中遍历每个文件夹,而不是为每个文件夹编写一个循环。因为代码变得太庞大了。

最佳答案

不是每个 /user/files/${2}_SOMELETTER 一个循环,您可以对参数列表中的所有目录使用一个循环,例如:

dirs=(/user/files/${2}_C /user/files/${2}_B)

for i in $(hadoop fs -ls "${dirs[@]}" | egrep ${1}.gz | awk -F " " '{print $8}')
do
hadoop fs -cp $i /apps/hive/warehouse/database.db/project/file_${1}
echo "copy file - "${i}
done

请注意,不是在 for 语句中写入目录参数,我把它们放在一个数组中。如果您有很多目录,这将更具可读性。

我还将过时的 `...` 语法替换为现代的 $(...)

关于bash - 如何使脚本处理不同的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42049431/

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