![](/img/trans.png)
[英]how to pass the filename as variable to a awk command from a shell script
[英]How to obtain new filename from old filename in the shell script?
我有一个具有输入和输出赞的可执行程序
./my_exe -i filename_input -o filename_output
我想使用该程序运行结构类似的文件夹中的所有文件名
root
|-folder_A
|-abc.txt
|-folder_B
|cdf.txt
因此,我们可以使用它来做。 但是问题是我想通过在像abc.txt这样的输入文件名之前在'.txt'之前添加扩展名'_processed'来自动从filename_input进行filename_output的输出。 然后输出将是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丢失了
$ 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
正确的解决方案取决于您要如何处理。
您应该遍历要重命名的文件,而不是目录。
for f in */*/*txt; do
echo "With path ${f} ==> ${f//.txt/processed.txt}"
base_f=${f##*/}
echo "Basenames: ${base_f} ==> ${base_f//.txt/processed.txt}"
done
您可能要使用find ... | xargs
要使用这些文件调用my_exe
时,需要使用find ... | xargs
。
确保您的*processed.txt
不再被转换!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.