重命名嵌套结构中的多个文件
Renaming multiple files in a nested structure
我有一个结构如下的目录:
root
|-dir1
| |-pred_20181231.csv
|
|-dir2
| |-pred_20181234.csv
...
|-dir84
|-pred_2018123256.csv
我想要 运行 一个将所有 pred_XXX.csv
文件重命名为 pred.csv
的命令。
我怎样才能轻松做到这一点?
我查看了 rename facility 但我不明白 perl 表达式语法。
编辑:我尝试使用此代码:rename -n 's/\training_*.csv$/\training_history.csv/' *.csv
但它不起作用
试试这个命令:
find root -type f -name "*.csv" -exec perl-rename 's/_\d+(\.csv)//g' '{}' \;
使用的选项:
-type f
指定文件或目录。
-name "*.csv"
仅匹配扩展名为 csv
的文件
-exec\-execdir
执行命令,在本例中,perl-rename
's/_\d+(\.csv)//g'
搜索像 _20181234.csv
这样的字符串并替换为 .csv
,</code> 表示找到第一组。</li>
</ul>
<p><strong>注意</strong></p>
<p>取决于您的 S.O。您可以只使用 <code>rename
而不是 perl-rename
。
使用一些 shell 循环:
for file in **/*.csv
do
echo mv "$(dirname "$file")/$(basename "$file")" "$(dirname "$file")/pred.csv"
done
在现代 shells **
是一个匹配层次结构中多个目录的通配符,是 find
的替代方案,这也是一个很好的解决方案。我不确定这是否应该改为 /**/*.csv
或 /root/**/*.csv
基于你提供的树,所以我把 echo
放在 'mv' 之前看看它是什么做。确保这将执行您期望的操作后,删除 echo
.
我有一个结构如下的目录:
root
|-dir1
| |-pred_20181231.csv
|
|-dir2
| |-pred_20181234.csv
...
|-dir84
|-pred_2018123256.csv
我想要 运行 一个将所有 pred_XXX.csv
文件重命名为 pred.csv
的命令。
我怎样才能轻松做到这一点?
我查看了 rename facility 但我不明白 perl 表达式语法。
编辑:我尝试使用此代码:rename -n 's/\training_*.csv$/\training_history.csv/' *.csv
但它不起作用
试试这个命令:
find root -type f -name "*.csv" -exec perl-rename 's/_\d+(\.csv)//g' '{}' \;
使用的选项:
-type f
指定文件或目录。-name "*.csv"
仅匹配扩展名为csv
的文件
-exec\-execdir
执行命令,在本例中,perl-rename
's/_\d+(\.csv)//g'
搜索像_20181234.csv
这样的字符串并替换为.csv
,</code> 表示找到第一组。</li> </ul> <p><strong>注意</strong></p> <p>取决于您的 S.O。您可以只使用 <code>rename
而不是perl-rename
。
使用一些 shell 循环:
for file in **/*.csv
do
echo mv "$(dirname "$file")/$(basename "$file")" "$(dirname "$file")/pred.csv"
done
在现代 shells **
是一个匹配层次结构中多个目录的通配符,是 find
的替代方案,这也是一个很好的解决方案。我不确定这是否应该改为 /**/*.csv
或 /root/**/*.csv
基于你提供的树,所以我把 echo
放在 'mv' 之前看看它是什么做。确保这将执行您期望的操作后,删除 echo
.