在子文件夹中获取.txt文件,并使用文件夹名称命名

时间:2019-07-11 07:52:22

标签: bash shell

folder
     |___subfolder
             |_____file.txt
     |
     |___subfolder
             |____subfolder
                      |_______file.txt
     etc

我有一个看起来像这样的文件夹。我想获取所有.txt文件,但由于它们都具有相同的名称,所以我也想在file.txt前面添加文件夹名称。

do
    name_folder= $(basename $folder)
    echo $name_folder
    for subfolder in $folder;
    do
    find .*txt
    done;
done;

我希望$(foldername)basename_txt,但是这样我只能获取.txt文件

2 个答案:

答案 0 :(得分:2)

您可以使用find命令来获取具有每个.txt文件完整路径的名称。

find . -name "*.txt"

将打印出

./test/subdir/file.txt
./test/subdir2/subdir/file.txt

如果您需要完整路径,则可以在.命令中使用它而不是find

find /home/someone/ -name "*.txt"

将产生:

/home/someone/test/subdir/file.txt
/home/someone/test/subdir2/subdir/file.txt

如果只需要最后一个目录,则可以将find命令的输出传递到sed中:

find /home/someone/ -name "*.txt" | sed 's/.*\/\(.*\/.*txt\)/\1/g'

将产生:

subdir/file.txt
subdir/file.txt

答案 1 :(得分:2)

folder=$(echo "${PWD##*/}") #assuming you need only folder name, not full path

# find way from Secespitus
find . -name "*.txt" | while read line
# for each line, using sed adding folder name after last use of character "/"
#then renaming
do mv $(echo $line) $(echo $line | sed "s/\(.*\)\//\1\/$folder/")
done