将所有 xlsx 文件递归解压到包含原始文件名的新目录中

将所有 xlsx 文件递归解压到包含原始文件名的新目录中

我有一堆 Excel 文件,我想从所有子目录中递归提取,将目录/文件名保留为每个 xlsx 的所有提取文件的新目录名。

提取我找到的文件。不幸的是,我的 bash 知识缺乏用一个命令来完成所有操作的技能。

所以我尝试先把它分成更小的部分:

for z in ./*
do name="${z%%_*}"; dest=".${name//[ .-]/}"; mkdir "$dest";
done

如果我尝试*

for z in ./*

搜索当前目录中的所有文件,并且与我预期的结果不同

find . -name "*.xlsx"

所以我尝试是否可以逆转它:

for f in | find . -name "*.xlsx"; do d="${f}"; mkdir -p "$d"

但它显然不起作用,因为我的管道是错误的

答案1

不知道你的分手是否bash正确。

因为我很久以前就不再使用 bash 了。

但是当您想要循环中 find 的输出时,请尝试以下操作:

find . -name '*.xlsx' -print0 |
    while IFS= read -r -d $'\0' z; do
        name="${z%%_*}" 
        dest=".${name//[ .-]/}" 
        mkdir "$dest"
    done

相关内容