根据列表重命名文件

时间:2016-01-15 15:52:45

标签: r bash list rename

我想基于文本文件(list.txt)重命名文件夹中的所有文件,其中包含两列:oldnam(代表当前名称)和newnam(包含所需的新名称)。

我的文字档案:

df <- "oldnam newnam
       TRTY_3.DOT 124325.DOT
       TRTY_4.DOT 123454.DOT
       TRTY_5.DOT 124355.DOT"
df <- read.table(text=df, header=T)
write.table(df, "list.txt", col.names=T, row.names=F, quote=F)

可以从R或直接在bash中进行(两种解决方案都可以帮助很多)?

2 个答案:

答案 0 :(得分:2)

首先列出文件夹中的文件

file.list <- list.files(yourfolderpath,  pattern="\\.DOT$", full.names=TRUE)

然后使用file.rename根据list.txt文件重命名文件。

   file.rename(from = file.path(dirname(file.list), list.txt$oldnam), to  = file.path(dirname(file.list), list.txt$newnam))

答案 1 :(得分:1)

文件夹

中的初始文件
 ll
total 8
-rw-r--r-- 1 root root   0 Jan 15 18:01 1.txt
-rw-r--r-- 1 root root   0 Jan 15 18:01 2.txt
-rw-r--r-- 1 root root   0 Jan 15 18:01 3.txt
-rw-r--r-- 1 root root   0 Jan 15 18:01 4.txt
-rw-r--r-- 1 root root   0 Jan 15 18:01 5.txt
-rw-r--r-- 1 root root  40 Jan 15 18:01 files
-rwxr-xr-x 1 root root 272 Jan 15 18:10 script.sh

文件列表

cat files
1.txt 11.txt
2.txt 22.txt
3.txt 33.txt

运行脚本

./script.sh files
root@xx:~#

运行脚本后文件夹中的文件

 ll
total 8
-rw-r--r-- 1 root root   0 Jan 15 18:01 11.txt
-rw-r--r-- 1 root root   0 Jan 15 18:01 22.txt
-rw-r--r-- 1 root root   0 Jan 15 18:01 33.txt
-rw-r--r-- 1 root root   0 Jan 15 18:01 4.txt
-rw-r--r-- 1 root root   0 Jan 15 18:01 5.txt
-rw-r--r-- 1 root root  40 Jan 15 18:01 files
-rwxr-xr-x 1 root root 270 Jan 15 18:11 script.sh

脚本

cat script.sh
#!/bin/bash
filename="$1"
folder_with_files=/root/

while read -r line
do
oldname=$(echo "$line" | awk '{print $1}')
newname=$(echo "$line" | awk '{print $2}')
[ -z "$oldname" ] && { break ; }
mv  $folder_with_files$oldname $folder_with_files$newname
done < "$filename"