文件名字符替换
filename character substitution
我有几千个文件需要通过删除文件名开头的一组字符来重命名/mv。
相关文件名的字符 f 后跟数字序列,文件名后加下划线。文件名可以包含 alhpa 数字和下划线。例如,f1234567_this_is_a_file.doc,或f987654321_mine.xlsx
数值的数量可以变化,但始终后跟下划线,但是文件名本身也可以包含下划线。
我已经尝试了非常 perl 脚本,并使用了 grep 但都无济于事。有没有办法做到这一点。另一个问题是文件名也可能包含() @ & 等
我可以使用 egrep -i "(f[0-9]+_)" 获取文件列表并使用它来解析第一部分并重命名文件,但这不是正在工作。
谢谢
更多:
我对一个文件执行了一个 ls -1,这样我就有了一个包含所有 10000 个文件名的列表。我在那个文件列表上使用了 egrep -i "(f[0-9]+)" 来给我一个需要更改名称的文件列表(大约 3000)。
我的 perl 脚本然后使用文件列表通过执行 cut -d'' -f 1 获取文件名的第一部分($pre)(例如 f123456)。我也得到了文件名的其余部分 ($post) 使用 cut -d'' -f2- 。然后我使用 mv $pre $post 生成了一个移动语句。我将其输出到一个文件并执行了它,但 none 个文件已重命名。
在 bash 中使用参数扩展。这是简单的脚本:
for name in *; do
mv "${name}" "${name#f[0-9]*_}"
done
它将删除前导 f
、数字和 _
。修改它以满足您的需要。
我有几千个文件需要通过删除文件名开头的一组字符来重命名/mv。
相关文件名的字符 f 后跟数字序列,文件名后加下划线。文件名可以包含 alhpa 数字和下划线。例如,f1234567_this_is_a_file.doc,或f987654321_mine.xlsx
数值的数量可以变化,但始终后跟下划线,但是文件名本身也可以包含下划线。
我已经尝试了非常 perl 脚本,并使用了 grep 但都无济于事。有没有办法做到这一点。另一个问题是文件名也可能包含() @ & 等
我可以使用 egrep -i "(f[0-9]+_)" 获取文件列表并使用它来解析第一部分并重命名文件,但这不是正在工作。
谢谢
更多:
我对一个文件执行了一个 ls -1,这样我就有了一个包含所有 10000 个文件名的列表。我在那个文件列表上使用了 egrep -i "(f[0-9]+)" 来给我一个需要更改名称的文件列表(大约 3000)。
我的 perl 脚本然后使用文件列表通过执行 cut -d'' -f 1 获取文件名的第一部分($pre)(例如 f123456)。我也得到了文件名的其余部分 ($post) 使用 cut -d'' -f2- 。然后我使用 mv $pre $post 生成了一个移动语句。我将其输出到一个文件并执行了它,但 none 个文件已重命名。
在 bash 中使用参数扩展。这是简单的脚本:
for name in *; do
mv "${name}" "${name#f[0-9]*_}"
done
它将删除前导 f
、数字和 _
。修改它以满足您的需要。