我必须使用for循环提取文件夹名称(folder10 folder44等)并使用每个文件夹名称生成目录但我得到文件名(file1 file12)并且在创建目录时出现错误,即“无法创建目录”。我必须在我的管道中操作.txt文件,所以我不能跳过/ home / data / folder * / file * in for循环
如何获取文件夹名称而不是文件名
#!/bin/bash
$out_dir=/home/data/results
for file in /home/data/folder*/file*
do
txtFile=${file##*/}
id=${txtFile%.txt}
echo "mkdir -p $out_dir/"${id}""
done
文件夹和文件结构
/home/data/folder10/file1/file1.txt
/home/data/folder44/file12/file12.txt
/home/data/folder100/file3/file3.txt
/home/data/folder250/file4/file4.txt
/home/data/folder1245/file5/file5.txt
我得到的输出 mkdir -p / home / data / results / file1 mkdir -p / home / data / results / file12 mkdir -p / home / data / results / file3
预期输出
mkdir -p /home/data/results/folder10
mkdir -p /home/data/results/folder44
mkdir -p /home/data/results/folder100
答案 0 :(得分:1)
这个:
#!/bin/bash
out_dir=/home/data/results
for file in /home/data/folder*/file*.txt; do
folder=${file%/*}
mkdir -p "$out_dir/${folder##*/}"
done
或者这个:
#!/bin/bash
out_dir=/home/data/results
for file in /home/data/folder*/file*/file*.txt; do
folder=${file%/*/*}
mkdir -p "$out_dir/${folder##*/}"
done