我需要通过从文件名的开头删除一组字符来重命名/ mv数千个文件。
相关文件名的字符f后跟数字序列,下划线表示文件名。文件名可以包含alhpa数字和下划线。例如,f1234567_this_is_a_file.doc或f987654321_mine.xlsx
数值的数量可以变化但总是后跟下划线,但是它自己的文件名也可以包含下划线。
我已经尝试了非常的perl脚本,并且使用grep但是一切都无济于事。有没有办法解决这个问题。另一个问题是文件名也可能包含()@&等
我可以使用egrep -i“(f [0-9] + _)”获取该文件的列表,并使用它来解析第一部分并重命名该文件,但这不起作用。
由于
MORE:
我在一个文件中输入了ls -1,这样我就有了一个包含10000个文件名的列表。我在文件列表上使用了egrep -i“(f [0-9] + )”来给我一个需要更改名称的文件列表(大约3000)。
我的perl脚本然后使用文件列表获取文件名的第一部分($ pre)(例如f123456 )通过执行cut -d'' - f 1.我还得到了剩下的文件名($ post)使用cut -d'' - f2-。然后我使用mv $ pre $ post生成了一个move语句。我将其输出到一个文件并执行它,但没有任何文件被重命名。
答案 0 :(得分:0)
在bash中使用参数扩展。这是一个简单的脚本:
for name in *; do
mv "${name}" "${name#f[0-9]*_}"
done
它会移除前导f
,数字和_
。修改它以满足您的需求。