我想保留文件但删除其扩展名。这些文件没有相同的扩展名。我的最终目标是删除所有扩展并将其更改为我选择的一个扩展。我把第二部分放下了。
到目前为止我的代码:
#!/bin/bash
echo -n "Enter the directory: "
read path
#Remove all extensions
find $path -type f -exec mv '{}' '{}'.extension \; #add desired extension
答案 0 :(得分:6)
您不需要外部命令find
,但仅在bash
中执行此操作。下面的脚本会删除文件夹path
中所有文件的扩展名。
for file in "$path"/*; do
[ -f "$file" ] || continue
mv "$file" "${file%.*}"
done
使用[ -f "$file" ]
的原因仅用于安全检查。 glob表达式" $ path" / *可能最终没有列出任何文件,在这种情况下,mv
命令会因为没有文件而失败。当[ -f "$file" ] || continue
变量为空时$file
返回失败错误代码,[ -f "$file" ]
条件通过退出循环来保护这一点。如果前一个命令失败,则在复合语句中使用||
将运行,因此当下一次命中continue
时,for循环终止。
如果您想添加新的扩展程序,请执行
mv "$file" "${file%.*}.extension"
答案 1 :(得分:1)
这也可能是一种方式
static myArray = [1, 2, 3];
答案 2 :(得分:0)
您可能想尝试以下操作。它使用find和awk with system()删除扩展名:
find . -name "*" -type f|awk 'BEGIN{FS="/"}{print $2}'|awk 'BEGIN{FS="."}{system("mv "$0" ./"$1"")}'
示例:
[root@puppet:0 check]# ls -lrt
total 0
-rw-r--r--. 1 root root 0 Oct 5 13:49 abc.ext
-rw-r--r--. 1 root root 0 Oct 5 13:49 something.gz
[root@puppet:0 check]# find . -name "*" -type f|awk 'BEGIN{FS="/"}{print $2}'|awk 'BEGIN{FS="."}{system("mv "$0" ./"$1"")}'
[root@puppet:0 check]# ls -lrt
total 0
-rw-r--r--. 1 root root 0 Oct 5 13:49 abc
-rw-r--r--. 1 root root 0 Oct 5 13:49 something
如果您有要添加到所有文件的特定扩展名,您可以修改命令,如下所示:
find . -name "*" -type f|awk 'BEGIN{FS="/"}{print $2}'|awk 'BEGIN{FS=".";ext=".png"}{system("mv "$0" ./"$1ext"")}'