首页 > 解决方案 > 如何从 shell 脚本中的旧文件名获取新文件名?

问题描述

我有一个可执行程序,它有输入和输出喜欢

./my_exe -i filename_input -o filename_output 

我想使用该程序来运行我的文件夹中具有类似结构的所有文件名

root
|-folder_A
   |-abc.txt
|-folder_B
   |cdf.txt

所以,我们可以使用 for 来做到这一点。但问题是我想通过在 '.txt' 之前添加扩展名 '_processed' 来自动从 filename_input 生成 filename_output ,例如 abc.txt 是 input file name 。然后输出将是 abc_processed.txt

如何在shell脚本中做到这一点?这是我当前的代码

for sub_folder in "${root_folder[@]}"
        do            
            filename_input=$sub_folder/*.txt
            filename_output= filename_input/*.txt/processed.txt
            echo filename_output
        done

我的脚本的输出是root/folder_A/*processed.txt. 我不知道为什么 abc 丢失了

标签: bashshell

解决方案


$ tree root
root
|-- directory-A
|   `-- abc.txt
`-- directory-B
    `-- def.txt

2 directories, 2 files
$ find root -type f -exec sh -c 'echo ${1%.txt}_processed.txt' _ {} \;
root/directory-B/def_processed.txt
root/directory-A/abc_processed.txt

或者:

$ for dir in root/*; do ( cd $dir; for file in *.txt; 
    do echo "$file --> ${file%.txt}_processed.txt"; done ) done
abc.txt --> abc_processed.txt
def.txt --> def_processed.txt

推荐阅读