检查文件扩展名BASH

时间:2015-10-21 13:20:07

标签: linux bash scripting

我正在尝试比较具有相同名称和相同内容的2个文件,但我只想保留其中一个。 可以说我有以下

/root/dir1/file1.doc
/root/dir1/file1.pdf 

我只想保留.doc文件,这是最好的方法吗?

2 个答案:

答案 0 :(得分:1)

dash联机帮助页(我相信所有bashkshzsh"继承"这些功能):

  

$ {parameter%word}删除最小的后缀模式。这个词是   扩大到产生一种模式。然后产生参数扩展   在参数中,后缀的最小部分与。匹配   图案                              删除。

     

$ {parameter %% word}删除最大的后缀模式。这个词被扩展为产生一种模式。然后产生参数扩展   in参数,后缀的最大部分匹配   图案                              删除。

     

$ {parameter#word}删除最小的前缀模式。这个词被扩展为产生一种模式。然后参数扩展   得到参数,前缀的最小部分匹配   按模式                              删除。

     

$ {parameter ## word}删除最大的前缀模式。这个词被扩展为产生一种模式。然后产生参数扩展   in参数,前缀的最大部分匹配   图案

在实践中:

shortSuff(){ printf '%s\n' "${1#*.}"; } 
#^applies the string op to the $1 positional parameter
#`printf '%s\n'` is like `echo` but doesn't break on e.g., hyphen-prefix arguments

file=/root/dir1/file1.doc
[ shortSuff "$file" = doc ] && echo "Yes, the short suffix is doc"

答案 1 :(得分:0)

您可以编写一个简短的脚本来为您执行此操作:

#!/bin/bash
EXT="${1}"
if -z "${EXT}"; then EXT=".doc"; fi
TD="$(mktemp -d)"
mv ./*"${EXT}" "${TD}"
rm ./*
mv "${TD}"/* .
rmdir "${TD}"

假设您的脚本名为keep_copy.sh,您可以按以下方式调用它:keep_copy.sh .doc