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文件
答案 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