我有一堆 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