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。。。