Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 重命名嵌套结构中的多个文件_Bash_Rename_File Rename - Fatal编程技术网

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”之前,以查看它将要做什么。在确保这将达到您期望的效果后,请删除回音。

查看此常见问题解答: