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