我正在尝试创建一个程序,它可以删除目录中具有特定扩展名的文件的扩展名。
例如,存在一个目录d1,在该目录中有三个文件a.jpg,b.jpg和c.txt,我想要操作的扩展名是. jpg。
在调用我的程序之后,我的输出应该是a b c.txt
,因为所有带有.jpg的文件现在都删除了jpg。
以下是我迄今为止解决这个问题的尝试:
#!/bin/bash
echo "Enter an extension"
read extension
echo "Enter a directory"
read directory
allfiles=$( ls -l $directory)
for x in $allfiles
do
ext=$( echo $x | sed 's:.*.::')
if [ $ext -eq $extension]
then
echo $( $x | cut -f 2 -d '.')
else
echo $x
fi
done
但是,当我运行这个程序时,我得到一个错误消息
'-f' is not defined
'-f' is not defined
我应该在代码中更改什么?
2条答案
按热度按时间um6iljoc1#
可以通过将
find
的结果传输到while
循环来解决问题:接下来,您可以解压缩一个不带扩展名
${file%.*}
的文件名,解压缩一个扩展名${file##*.}
的文件名(请参见Bash - Shell参数扩展):最后一步是引入某种加固,文件名可能包含一些“奇怪”的字符,比如换行符或反斜杠,我们可以强制
find
打印文件名,后面跟一个空字符(而不是换行符),然后调优read
来处理它:7eumitmz2#
使用
mv
命令怎么样?