如何使用cut命令或任何其他进程更改目录中的文件名

时间:2018-03-06 18:11:36

标签: bash cut

我在目录中有很多文件,使用剪切" - "特定地方的角色或任何其他解决方案

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

3 个答案:

答案 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开关)

warning 还有其他同名工具可能会或可能不会这样做,所以要小心。

如果您运行以下命令(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编写的。