gpt4 book ai didi

linux - 从文件名中提取唯一标识

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:56 28 4
gpt4 key购买 nike

我通过将文本文件放在子目录中来组织目录中的文本文件。子目录名称源自原始文件名。通过这种方式,可以很容易地分辨出哪个文件属于其各自的文件夹。 bash for 循环 遍历所有 txt 文件并相应地创建文件夹。文本文件具有以下示例格式:xxxx-test_file1-aa1-a2.txtxxxx-test_file1-aa1--2.txt。根据第一个示例,对即将创建的文件夹的名称唯一重要的两件事是 xxxx-aa1-a2(始终具有 6 个唯一字符id 在最后)。因此,新文件夹将被命名为 xxxx-aa1-a2。以下仅适用于为某些文件提取正确的名称并与其他文件中断。

FILE_PATH="/my_files/"
for file in "$FILE_PATH"/*.txt; do
tmp=${file#*-}; head=${file%-"$tmp"}
mid=${tmp%-*}; tail=${tmp#"$mid"-}
base="${head,,}-${tail,,}"
dir=${base%.txt}
mkdir -p "$dir"
mv "$file" "$dir/$base"
done

${var#prefix} 扩展为移除前缀的 var 的值,${var%suffix} 相应地执行带有后缀的相同替换。最后,${var,,} 生成值的小写版本。然后我们简单地将这些部分组装成你想要的文件名结构。

如果文件只有两个 -:xxxx-test_file-aaasw1xxxx-test_file-bswb2u

|-- ./
| |-- xxxx-aaasw1
| |--xxxx-test_file-aaasw1.txt
| |-- xxxx-bswb2u
|--xxxx-test_file-bswb2u.txt.

但是如果文件有两个以上的-:xxxx-test_file-caa-v3u 或者xxxx-test_file-caa-v3-

|-- ./
| |-- xxxx-v3u
| |-- xxxx-test_file-caa-v3u.txt
| |-- xxxx-
|-- xxxx-test_file-caa-v3-.txt.

最佳答案

那么,您希望将目录命名为“a-b”,其中 a 是第一个破折号之前的所有内容,b 是最后一个破折号和第一个点之间的所有内容?

touch xxxx-test_file-aaasw1
touch xxxx-test_file-bswb2u
touch xxxx-test_file-caa-v3u.txt
touch xxxx-test_file-caa-v3-.txt

for f in *
do
head=$(cut -f1 -d'-' <<< "$f")
mid=$(cut -f2 -d'-' <<< "$f")
tail=$(cut -f3- -d'-' <<< "$f" | cut -f 1 -d .)
ext=$(cut -f3- -d'-' <<< "$f" | cut -f 2- -d .)
echo "[$head][$mid][$tail][$ext]"
mkdir "${head}-${tail}"
mv "${f}" "${head}-${tail}/${head}-${tail}.${ext}"
echo "${mid}" > "${head}-${tail}"/title_info.txt
done

tree

输出:

|-- xxxx-aaasw1
| `-- xxxx-test_file-aaasw1
|-- xxxx-bswb2u
| `-- xxxx-test_file-bswb2u
|-- xxxx-caa-v3-
| `-- xxxx-test_file-caa-v3-.txt
`-- xxxx-caa-v3u
`-- xxxx-test_file-caa-v3u.txt

还有其他几种方法可以解决这个问题,但我能想到的方法比这种简单但效率不高的方法更隐蔽。

关于linux - 从文件名中提取唯一标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26557550/

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