我在目录中有很多文件,使用剪切" - "特定地方的角色或任何其他解决方案
file-2018-09-07-02
file-2017-07-08-03
file-2018-05-09-04
file-2017-03-10-05
file-2016-10-11-06
依旧.....,我怎样才能将它们转换为如下
file-2018090702
file-2017070803
file-2018050904
file-2017031005
file-2016101106
答案 0 :(得分:0)
如果 使用cut
,请使用循环:
for file in file-????-??-??-??; do # pick up all matches for the glob
[[ -f $file ]] || continue # skip if not a regular file
new_name=$(cut -c1-5,6-9,11,12,14,15,17,18 <<< "$file") # generate new name
mv "$file" "$new_name" # move!
done
答案 1 :(得分:0)
只是打击。这不假设文件名模式:
for f in *; do
new=$( IFS=-; set -f; set -- $f; new=$1; shift; [[ $# -gt 0 ]] && { IFS=; new+="-$*"; }; echo "$new" )
[[ "$f" = "$new" ]] || echo mv "$f" "$new"
done
答案 2 :(得分:0)
试试这个:
rename -n 's/(\d{4})-(\d{2})-(\d{2})-(\d{2})$/$1$2$3$4/' *
(当你的测试没问题时删除-n开关)
还有其他同名工具可能会或可能不会这样做,所以要小心。
如果您运行以下命令(GNU
)
$ file "$(readlink -f "$(type -p rename)")"
你有一个像
的结果.../rename: Perl script, ASCII text executable
且不包含:
ELF
然后这似乎是正确的工具=)
如果没有,请将其设为Debian
上的默认值(通常已经是这种情况)和Ubuntu
之类的衍生物:
$ sudo update-alternatives --set rename /path/to/rename
(将/path/to/rename
替换为perl's rename
命令的路径。
如果您没有此命令,请搜索您的软件包管理器进行安装或do it manually
最后但同样重要的是,这个工具最初是由Perl的父亲Larry Wall编写的。