gpt4 book ai didi

linux - 根据 bash 中文件名的子字符串复制最新更新的文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:59 27 4
gpt4 key购买 nike

我必须从文件夹中归档一些文件(基于文件中的日期),但可以有多个文件具有相同的名称(子字符串)。我只需要将最新的复制到一个单独的文件夹中。

for eg.
20180730.abc.xyz2.jkl.20180729.164918.csv.gz

在此 -> 20180730 和 20180729 代表我必须在(第一个日期)20180730 之前搜索的日期。这部分已完成。

我写的搜索部分是:

for FILE in $SOURCE_DIR/$BUSINESS_DT*
{
do
# Here I have to search if this FILENAME exists and if yes, then copy that latest file
cp "${FILE}" $TARGET_DIR/
done

现在我必须搜索同一个 SOURCE_DIR 是否包含名称类似于 20180730.abc.xyz2.jkl 的文件。如果它存在,那么我必须复制它。所以基本上,我必须提取 abc.xyz2.jkl 部分。我不能对字段使用剪切,因为文件名可能类似于 abc.xyz2.jkl 或 abc.xyz。该部分是可变的,也可以有数字最后两个数字也是可变的并且可以改变。一些例子是:

20180730.abc.xyz2.jkl.20170729.890789.csv.gz
20180730.abc.xyz2.20180729.121212.csv.gz
20180730.ab.xy.20180729.11111.csv.gz

任何人都可以帮助我做到这一点。我尝试了查找和剪切,但没有得到所需的结果。

非常感谢

最佳答案

Python 可能是实现此类功能的更好选择,但这里有一个 bash 示例。您可以使用 sed 位置参数来提取所需的文件名部分。然后使用关联数组存储包含找到的子字符串的最新文件的文件名。 完成后,您可以返回并进行复制操作。这是一个提取两个 8 位数字和句点之间的字符串的示例。此 sed 表达式可能不适用于您的完整数据集,但它适用于您提供的 3 个示例。此外,这不会处理一个唯一标识符是另一个唯一标识符的子集的情况。

declare -A LATEST
for FILE in $SOURCE_DIR/$BUSINESS_DT*
do
# Extract the substring unique identifier
HASH=$(echo "${FILE}" | sed "s/[0-9]\{8\}\.\(.*\)\.[0-9]\{8\}.*$/\\1/g")

# If this is the first time on this unique identifier,
# then get the latest matching file
if [ ${LATEST[${HASH}]}abc == abc ]
then
LATEST[${HASH}]=$(find . -type f -name '*${HASH}*' -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" ")
fi
done

for FILE in "${!LATEST[@]}"
do
cp "${FILE}" $TARGET_DIR/
done

关于linux - 根据 bash 中文件名的子字符串复制最新更新的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51713636/

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