我想从这个文件名中删除最后 3 列
david@david-ThinkPad-E480:~/Downloads$ ll A*
-rw-rw-r-- 1 david david 16006720 сен 9 11:03 'A.Matrosov. E.Rodionov. S.Bratus. Rootkits and Bootkits. Reversing Modern Malware and Next Gen...pdf'
david@david-ThinkPad-E480:~/Downloads$
我试过
david@david-ThinkPad-E480:~/Downloads$ mv A.Matrosov.\ E.Rodionov.\ S.Bratus.\ Rootkits\ and\ Bootkits.\ Reversing\ Modern\ Malware\ and\ Next\ Gen...pdf {cut -d ' ' -f 1-6 <<< ls A.Matrosov.\ E.Rodionov.\ S.Bratus.\ Rootkits\ and\ Bootkits.\ Reversing\ Modern\ Malware\ and\ Next\ Gen...pdf}
答案1
类似于此,使用 shell 参数扩展(假设名称在$fn
)
ext=${fn##*.} # get extension
noext=${fn%.*} # shed extension
minus1=${noext%.*} # shed last part
minus2=${minus1%.*} # shed next to last part
minus3=${minus2%.*} # etc...
final=${minus3}.${ext}
把这段代码写成难以阅读的一行代码留给读者练习吧:)
使用perl-rename
(又名rename
或prename
,取决于发行版):
rename 's/^(.*)(\.[^.]+){3}(\.[^.]+)$/$1$3/' <file>
(实际执行时删除-n
或替换)。-v