文件重命名时快速添加时间前缀

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件重命名时快速添加时间前缀相关的知识,希望对你有一定的参考价值。

参考技术A 保存文件时,为了以后方便整理,常常需要重命名文件,加上时间前缀。
比如想要保存一个文件 jenkins.txt ,就重命名为 20181223_jenkins.txt 。
当文件数量很多或者需要多次进行此操作时,每次都手动输入时间前缀就成为一件很麻烦的事情。
而这件事情可以用脚本去完成,重命名时,使用快捷键就可以快速把 20181223_ 这样的时间前缀加上去,而且时间前缀为当天的日期。

python;WinHotKey软件(或者其他可以定义快捷键的软件)

自动获取当天日期并进行粘帖操作的脚本 time_current.pyw 如下:
注意脚本后缀为 pyw ,而不是 py ,原因在后面解释。

包 pyperclip 和 pyautogui 如果没有,可以通过 pip install pyperclip 和 pip install pyautogui 来安装。
脚本首先获取当天日期,然后模仿系统的 Ctrl+v 操作,来执行粘贴操作。
把脚本命名为 time_current.pyw ,之所以使用了 .pyw 而不是 .py 的后缀,是因为 .py 文件在执行的时候会有弹窗,会使原来的光标处失去焦点,而没有产生粘贴内容。 .pyw 文件由 pythonw.exe 来执行,不会产生弹窗(no window),从而可以在光标处产生粘贴内容。

此处采用 WinHotKey 软件为刚刚的脚本设置快捷键。
如下图所示,为脚本设置了快捷键 Win+Y

以后只要想在光标处,粘贴时间前缀,只要按下快捷键 Win+Y 即可。
重命名时,也可以在光标下粘贴时间前缀。

重命名文件和目录(添加前缀)

【中文标题】重命名文件和目录(添加前缀)【英文标题】:Rename Files and Directories (Add Prefix) 【发布时间】:2011-06-14 19:36:54 【问题描述】:

我想在所有文件夹和目录上添加前缀。

例子:

我有

Hi.jpg
1.txt
folder/
this.file_is.here.png
another_folder.ok/

我想添加前缀“PRE_”

PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/

问候,

【问题讨论】:

在 this 上使用 AWK 答案:awk '$0="prefix"$0' file > new_file 【参考方案1】:

感谢Peter van der Heijden,这里有一个适用于包含空格的文件名:

for f in * ; do mv -- "$f" "PRE_$f" ; done

(需要“--”才能成功处理以破折号开头的文件,否则其名称将被解释为 mv 命令的开关)

【讨论】:

嘿,没错,如果你的文件中有空格,这将完全不起作用。 如果您将ls 命令更改为* 并在mv 的参数两边加上双引号,它将适用于包含空格的文件。 @CanSpice 是否可以用类似的脚本来反转这个操作(去掉前缀)? 谢谢,伙计。这里的实习生在重命名所有 67 个文件时失去了他的手指帽。干杯。 它应该是“mv --”而不仅仅是“mv”,以防止文件以破折号开头,否则会被解释为命令开关。我将提供一个编辑来纠正这个问题。【参考方案2】:

这样使用the rename script:

$ rename 's/^/PRE_/' *

文件名中的元字符或空格没有问题。

【讨论】:

有些系统有一个名为“rename”的 util-linux 实用程序,它的工作方式不同(在 Ubuntu 上它被称为“rename.ul”)。 rename 一直帮助我非常轻松地处理多个文件重命名。 前缀中的 @ 符号有问题。需要 \@ 但这很容易。效果很好。【参考方案3】:

为文件(目录)添加前缀或后缀,您可以使用xargs的简单而强大的方式:

ls | xargs -I  mv  PRE_

ls | xargs -I  mv  _SUF

它正在使用 xargs 的参数替换选项:-I。您可以从手册页获取更多详细信息。

【讨论】:

P.S.:如果只想重命名当前目录的部分文件(目录),只需在xargs前过滤即可,如:ls *.old | xargs -I mv PRE_ 有趣的是使用重命名不起作用。使用 xargs 非常适合我的 RHEL 设置,所以 +1 为这个选项,让理解命令变得容易 如果文件名包含单引号则不起作用,失败并显示:xargs:不匹配的单引号;默认情况下,引号对 xargs 来说是特殊的,除非您使用 -0 选项【参考方案4】:

这可以通过运行一个简单的find 命令来完成:

find * -maxdepth 0 -exec mv  PRE_ \;

上面的命令会在当前目录中的所有文件和文件夹前加上PRE_

【讨论】:

【参考方案5】:

要使用 util-linux 的 rename(而不是 prename,Debian 和某些其他系统的 perl 变体)为当前目录中的所有文件和文件夹添加前缀,您可以:

rename '' <prefix> *

这会找到第一次出现的空字符串(立即找到),然后用您的前缀替换该出现的位置,然后将文件名的其余部分粘贴到该文件名的末尾。完成。

对于后缀,您需要use the perl version 或use find。

【讨论】:

Debian Stretch 上的 util-linux 似乎将其提供为 /usr/bin/rename.ul【参考方案6】:

如果你有 Ruby(1.9+)

ruby -e 'Dir["*"].each|x| File.rename(x,"PRE_"+x) '

【讨论】:

【参考方案7】:

使用 Perl:

perl -e 'rename $_, "PRE_$_" for <*>'

【讨论】:

【参考方案8】:

这是一个您可以使用的简单脚本。我喜欢使用非标准模块 File::chdir 来处理管理 cd 操作,因此要按原样使用此脚本,您需要安装它 (sudo cpan File::chdir)。

#!/usr/bin/perl

use strict;
use warnings;

use File::Copy;
use File::chdir; # allows cd-ing by use of $CWD, much easier but needs CPAN module

die "Usage: $0 dir prefix" unless (@ARGV >= 2);
my ($dir, $pre) = @ARGV;

opendir(my $dir_handle, $dir) or die "Cannot open directory $dir";
my @files = readdir($dir_handle);
close($dir_handle);

$CWD = $dir; # cd to the directory, needs File::chdir

foreach my $file (@files) 
  next if ($file =~ /^\.+$/); # avoid folders . and ..
  next if ($0 =~ /$file/); # avoid moving this script if it is in the directory

  move($file, $pre . $file) or warn "Cannot rename file $file: $!";

【讨论】:

【参考方案9】:

在我的系统上,我没有rename 命令。这是一个简单的单列。它递归查找所有 HTML 文件,并在其名称前添加 prefix_

for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done

【讨论】:

find也可以执行命令,不需要循环:***.com/a/33297439/2351568【参考方案10】:

这将为您的文件在其目录中添加前缀。

$f%/* 是直到最后一个斜杠 / 的路径 -> 目录

$f##*/ 是在最后一个斜线 / 之前没有任何内容的文本 -> 没有路径的文件名

原来如此:

for f in $(find /directory/ -type f); do 
  mv -v $f $f%/*/$(date +%Y%m%d)_Prefix_$f##*/
done

【讨论】:

以上是关于文件重命名时快速添加时间前缀的主要内容,如果未能解决你的问题,请参考以下文章

重命名文件和目录(添加前缀)

在 Windows 7 中使用 REN 批量重命名文件(添加前缀)

如何以照片的拍摄时间批量重命名文件

js 如何批量重命名文件

批量文件名加前缀

在单个命令中使用前缀重命名文件夹中的所有文件