在linux中重命名一个附加了日期的文件

时间:2016-06-10 11:24:21

标签: linux bash rename

文件夹中有一个文件,其中附有日期和时间。我想将其重命名为其他内容,以便我可以轻松访问它。我知道这个文件名的起始字。他们有没有办法重命名这个(使用通配符或其他东西)? 。因为我正在尝试编写脚本来自动执行某些操作,所以无法使用Tab。

另外,我想访问词典最后一个元素,如果有多个文件则重命名。

3 个答案:

答案 0 :(得分:1)

假设文件的名称为<?xml version="1.0" encoding="utf-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"> <property name="autoIncrement" value="true" dbms="mysql,h2,postgresql,oracle"/> <property name="floatType" value="float4" dbms="postgresql, h2"/> <property name="floatType" value="float" dbms="mysql, oracle"/> <changeSet id="20160513091901-1" author="jhipster"> <createTable tableName="contact"> <column name="id" type="longvarchar" autoIncrement="${autoIncrement}"> <constraints primaryKey="true" nullable="false"/> </column> </changeSet> </databaseChangeLog> ,您可以这样做:

bob_2016-06-10_06:00:00.txt

答案 1 :(得分:1)

您可以将重命名与正则表达式一起使用。语法是:

Usage: rename [-v] [-n] [-f] perlexpr [filenames]

因此,给出以下文件:

coda@pong:/tmp/kk$ ls -l
total 0
-rw-rw-r--  1 coda coda     0 Jun 10 13:28 aaaa-2016-01-01.txt
-rw-rw-r--  1 coda coda     0 Jun 10 13:28 aaaa-2016-01-02.txt
-rw-rw-r--  1 coda coda     0 Jun 10 13:28 aaaa-2016-01-03.txt
-rw-rw-r--  1 coda coda     0 Jun 10 13:28 aaaa-2016-01-04.txt

您可以这样重命名:

coda@pong:/tmp/kk$ rename -v 's/aaaa/xxxx/' *.txt
aaaa-2016-01-01.txt renamed as xxxx-2016-01-01.txt
aaaa-2016-01-02.txt renamed as xxxx-2016-01-02.txt
aaaa-2016-01-03.txt renamed as xxxx-2016-01-03.txt
aaaa-2016-01-04.txt renamed as xxxx-2016-01-04.txt

如果你想跟踪字典最后一个元素,我会在脚本中使用这样的东西:

ln -sf `ls | tail -n1` latest

由于ls默认按名称排序,因此您将始终拥有指向词典最后一个元素的链接:

coda@pong:/tmp/kk$ ls -lrt
total 0
-rw-rw-r-- 1 coda coda  0 Jun 10 13:28 xxxx-2016-01-01.txt
-rw-rw-r-- 1 coda coda  0 Jun 10 13:28 xxxx-2016-01-02.txt
-rw-rw-r-- 1 coda coda  0 Jun 10 13:28 xxxx-2016-01-03.txt
-rw-rw-r-- 1 coda coda  0 Jun 10 13:28 xxxx-2016-01-04.txt
lrwxrwxrwx 1 coda coda 19 Jun 10 13:59 latest -> xxxx-2016-01-04.txt

答案 2 :(得分:1)

您想要查找目录中最后更改的文件吗?哪个匹配模式?

find . -maxdepth 1 -mindepth 1 -type f -name "prefix*" \
  -printf "%TY%Tm%TdTH%TM %p\n" | sort -nr | read -r _ file

printf "%s" "$file"

假设没有文件名包含换行符。而你实际上只是想在目录中获取最后一个更改的文件。

替代方案你可以做这样的事情:

find . -maxdepth 1 -mindepth 1 -type f -name "prefix*" | sort -nr -t- -k2

将对这样的文件进行排序:

prefix-2016-05-05
prefix-2016-06-05
prefix-2016-04-08

prefix-2016-06-05
prefix-2016-05-05
prefix-2016-04-08