【问题标题】:Bash - Rename Files recursively from Database ValueBash - 从数据库值递归地重命名文件
【发布时间】:2017-12-30 17:07:18
【问题描述】:

我对 Linux 还是很陌生。

我有一个文件夹,其中包含大约 1000 个文件,并且文件名存储在数据库下。

我想做的是用同一数据库中的另一个值递归地重命名它们。

我的数据库结构

oldVal      | newVal
oldFileName | newFileName

什么是最短和最有效的方法?

提前感谢您的提示。

【问题讨论】:

  • 类似帖子中提到的步骤很少。 stackoverflow.com/questions/8416990/…。我更喜欢 for 循环,因为它给了我更多的控制权并使用内置的 bash(无需额外的安装/工具)
  • 递归?您的数据库是否包含带路径的文件名?
  • 或者 recursively 是否意味着重命名的文件可能应该再次重命名,例如,如果数据库包含条目 name1 | name2 和 name2 | name3,则 name1 应该重命名为 name3?
  • 你说的数据库是什么意思?您的意思是文件在 MariaDB 或 postgres 等数据库中吗?或者,你的意思是我有一个文本文件用作数据库?
  • @Cyrus 是的,确实如此。 [at]user1934428 它将被重命名为 name2。 [at]David Mariadb。

标签: linux bash shell recursion


【解决方案1】:

可以将数据库信息导出到文本文件吗?如果是的话,对于 MySQL 数据库,你可以试试这个。

首先,在你的 MySQL 中执行这个查询...

SELECT field1,field2
FROM table
INTO OUTFILE '/your/path/with/files/to/rename/export.txt'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

之后,转到 /your/path/with/files/to/rename/ 文件夹并粘贴此...

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
LIST=`cat /your/path/with/files/to/rename/export.txt`
for i in $LIST ;
do
 field1=`echo $i | cut -d',' -f1`
 field2=`echo $i | cut -d',' -f2`
 \mv "./"$field1 "./"$field2
done
IFS=$SAVEIFS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2013-02-07
    • 1970-01-01
    • 2011-01-11
    • 2018-11-28
    • 1970-01-01
    • 2019-08-27
    相关资源
    最近更新 更多