Bash 重命名嵌套结构中的多个文件
我有一个具有以下结构的目录:Bash 重命名嵌套结构中的多个文件,bash,rename,file-rename,Bash,Rename,File Rename,我有一个具有以下结构的目录: root |-dir1 | |-pred_20181231.csv | |-dir2 | |-pred_20181234.csv ... |-dir84 |-pred_2018123256.csv 我想运行一个命令,将所有pred_XXX.csv文件重命名为pred.csv 我怎样才能轻松做到这一点 我已经研究了perl表达式,但不理解perl表达式语法 编辑:我尝试使用以下代码:重命名-n's/\training\u*.csv$/\training\u hi
root
|-dir1
| |-pred_20181231.csv
|
|-dir2
| |-pred_20181234.csv
...
|-dir84
|-pred_2018123256.csv
我想运行一个命令,将所有pred_XXX.csv文件重命名为pred.csv
我怎样才能轻松做到这一点
我已经研究了perl表达式,但不理解perl表达式语法
编辑:我尝试使用以下代码:重命名-n's/\training\u*.csv$/\training\u history.csv/'*.csv,但不起作用尝试使用以下命令:
find root -type f -name "*.csv" -exec perl-rename 's/_\d+(\.csv)/$1/g' '{}' \;
使用的选项:
-键入f以指定文件或目录。
-name*.csv仅与扩展名为csv的文件匹配
-exec \-execdir执行命令,在本例中为perl rename
“s/\ud+\.csv/$1/g”搜索类似于_20181234.csv的字符串,并将其替换为.csv,$1表示找到的第一个组。
注
根据您的S.O.,您可以使用justrename而不是perl rename 使用一些shell循环:
for file in **/*.csv
do
echo mv "$(dirname "$file")/$(basename "$file")" "$(dirname "$file")/pred.csv"
done
在现代shell中,**是一个通配符,可以匹配层次结构中的多个目录,这也是一个很好的解决方案。根据您提供的树,我不确定是否应该改为/***.csv或/root/***.csv,因此我将echo放在“mv”之前,以查看它将要做什么。在确保这将达到您期望的效果后,请删除回音。查看此常见问题解答: