bash - 如何从 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 丢失了
解决方案
$ 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
推荐阅读
- mysql - 为什么以下查询不起作用(您不能在 FROM 子句中指定目标表 'p1' 进行更新)?
- php - 使用下拉菜单将主 ID 传递给使用 MYSQLi 的 PHP 表单不起作用
- php - 根据时间戳查询帖子类型
- linux - 在没有选项的情况下使用 SED?sed 's#.*/##'
- openlayers - 通过在 DD、DMS、DDM 之间轻松切换,使用 OpenLayers 格式化 GeoJSON 坐标?
- c++ - 我将如何从 for 循环中找到一组整数的平均值(在 C++ 中)
- python - pandas:计算行之间的差异
- vue.js - 请帮忙!!如何将 GET 用于 Nuxt Apollo?
- php - 无法从 FB sdk 获取 accessToken
- python - 如何使用 PIL 在 Google Colab 中截屏