Linux 检查文件扩展名BASH

Linux 检查文件扩展名BASH,linux,bash,scripting,Linux,Bash,Scripting,我试图比较两个文件,它们有相同的名称和相同的内容,但我只想保留其中一个。 假设我有以下几点 /root/dir1/file1.doc /root/dir1/file1.pdf 我只想保留.doc文件,最好的方法是什么?从dash手册页(我相信所有bash、ksh和zsh都“继承”了这些特性): ${parameter%word}删除最小的后缀模式。这个词是 展开以产生图案。然后进行参数展开 在参数中,后缀的最小部分与 图案 删除 ${parameter%%word}删除最大的后缀模式。这个词

我试图比较两个文件,它们有相同的名称和相同的内容,但我只想保留其中一个。 假设我有以下几点

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

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

dash
手册页(我相信所有
bash
ksh
zsh
都“继承”了这些特性):

${parameter%word}删除最小的后缀模式。这个词是 展开以产生图案。然后进行参数展开 在参数中,后缀的最小部分与 图案 删除

${parameter%%word}删除最大的后缀模式。这个词被扩展以产生一种模式。然后进行参数展开 在参数中,后缀的最大部分与 图案 删除

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

${parameter##word}删除最大的前缀模式。这个词被扩展以产生一种模式。然后进行参数展开 在参数中,前缀的最大部分与 图案

实际上:

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"

您可以编写一个简短的脚本来完成此操作:

#!/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

rm/root/dir1/file1.pdf
这是我能想到的在短时间内解决此问题的最糟糕方法。读了太多的每日WTF。。。