【问题标题】:Renaming with lists使用列表重命名
【发布时间】:2015-04-13 02:38:21
【问题描述】:

我有一组文件,我想使用存储在txt 文件中的新文件名来重命名它们。我的原始文件:

7170M
7172M
7187P
7192N
7198P

我想为每个文件名添加特定的新名称,以便上述文件变为:

1956_26_7170M
1962_12_7172M
1989_32_7187P
1986_22_7192N
1943_13_7198P

我创建了一个包含新文件名的文档new_names.txt 并尝试了以下操作。

for f in *.txt; do mv "$f" "$new_name"; done < new_names.txt

但它只更改第一个文件名。

【问题讨论】:

    标签: bash for-loop rename


    【解决方案1】:

    您只能将名称的新部分存储在文件中(前提是您将按排序顺序处理文件):

    1956_26
    1962_12
    1989_32
    1986_22
    1943_13
    

    然后,遍历文件,为每个文件读取一行:

    for file in 7* ; do
        read new
        mv "$file" "$new"_"$file"
    done < new_names.txt
    

    您的主要问题是for ... in 不会从文件中读取,它会遍历in 之后给出的列表。在您的情况下,该列表只有一个成员:new_names.txt。此外,您没有在任何地方填充 $new_name。

    【讨论】:

    • 感谢您的建议和解释我在哪里犯了错误。
    猜你喜欢
    • 2022-08-09
    • 2021-10-30
    • 1970-01-01
    • 2011-04-09
    • 2015-10-23
    • 2017-12-30
    • 2017-04-29
    • 1970-01-01
    相关资源
    最近更新 更多