文件夹中有一个文件,其中附有日期和时间。我想将其重命名为其他内容,以便我可以轻松访问它。我知道这个文件名的起始字。他们有没有办法重命名这个(使用通配符或其他东西)? 。因为我正在尝试编写脚本来自动执行某些操作,所以无法使用Tab。
另外,我想访问词典最后一个元素,如果有多个文件则重命名。
答案 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