如何在 bash 中重命名列表中的文件?

问题描述 投票:0回答:2

我有一个包含如下文件名的文件:

my_cool_file.xxx
my_cool_file2.xxx
my_cool_file3.xxx

我有一个文件夹,里面有:

some_file.xxx
some_file2.xxx
some_file3.xxx

我想要一个 bash 脚本来从文件名文件中取出一行并重命名文件夹中的一个文件。

有办法做到这一点吗?

bash rename file-rename
2个回答
3
投票

注意:这个答案总体来说不太好,但它解决了OP的问题。

所有文件都以 _file.xxx 或 _fileN.xxx 结尾吗?

基本上,您只想更改文件名的前缀吗?

假设我正确理解你的问题,并且没有编号的文件位于 file_list.txt 的最后以下应该可以解决问题


COUNTER=0
for FILE in `ls *.xxx | sort`; do
    COUNTER=$(($COUNTER+1))
    echo Moving $FILE to `sed -n ${COUNTER}p file_list.txt`
    #mv "${FILE}" `sed -n ${COUNTER}p file_list.txt`
done

如果您希望实际移动发生,请在带有

mv
的行中进行评论。


0
投票

或者,不太聪明,但还有另一种方法。

就我而言,将 MP4 文件名重命名为 SRT 文件名:

ls *.srt > SRT.txt
ls *.mp4 > MP4.txt
paste -d ';' SRT.txt MP4.txt > SM.txt

while read -r line; do
  mv "$(echo $line | cut -f 2 -d ';')" "$(echo $line | cut -f 1 -d ';' | sed -r 's/.srt/.mp4/')"
done < SM.txt
© www.soinside.com 2019 - 2024. All rights reserved.