Bash 如何在一个目录中找到两个同名但扩展名不同的文件,并将它们放在一个新目录中

Bash 如何在一个目录中找到两个同名但扩展名不同的文件,并将它们放在一个新目录中,bash,Bash,bash有一个问题,我在一个目录中有一些不同的文件,每个文件都有一个同名但扩展名不同的副本,如下所示: 文件脚本位于主目录和包含文件的主目录中 ~home/file_directory: 文件如下所示: pippo.cvs pippo.xlsx mimmo.cvs mimmo.xlsx lollo.cvs lollo.xlsx 我希望有一个新目录,其中包含两个文件的名称相同: pippo mimmo lollo ~ho

bash有一个问题,我在一个目录中有一些不同的文件,每个文件都有一个同名但扩展名不同的副本,如下所示:

文件脚本位于主目录和包含文件的主目录中

~home/file_directory:
文件如下所示:

    pippo.cvs
    pippo.xlsx
    mimmo.cvs
    mimmo.xlsx
    lollo.cvs
    lollo.xlsx
我希望有一个新目录,其中包含两个文件的名称相同:

    pippo
    mimmo
    lollo

~home/file_directory/pippo:
    pippo.xlsx
    pippo.csv
所以


首先进入所有文件所在的目录

Administrators-MacBook-Pro:test anudeep$ for i in *;do mkdir ${i%.*};done
mkdir: lollo: File exists
mkdir: mimmo: File exists
mkdir: pippo: File exists
Administrators-MacBook-Pro:test anudeep$
上面使用FileNamesWith扩展名创建目录忽略文件存在,因为目录已经创建

然后将文件移动到所需的目录

Administrators-MacBook-Pro:test anudeep$ for i in *.*;do mv $i ${i%.*};done

你现在完成了

这是一个相当基本的脚本问题,技巧在于提取目录名:

for fname in *.cvs *.xlsx
do
    # delete the shortest string on the right
    # starting with '.'
    dname=${fname%.*}

    # If the directory does not exist then create it
    [[ -d $dname ]] || mkdir "$dname"

    mv "$fname" "$dname"
done
很多双引号,以防在文件名中嵌入空格

for fname in *.cvs *.xlsx
do
    # delete the shortest string on the right
    # starting with '.'
    dname=${fname%.*}

    # If the directory does not exist then create it
    [[ -d $dname ]] || mkdir "$dname"

    mv "$fname" "$dname"
done