在Unix中为某些文件名添加前缀

时间:2017-03-16 16:22:04

标签: bash unix

我需要创建一个脚本,该脚本将通过并向多个目录中的所有文件添加下划线,忽略已经有前缀的文件。例如,_file1, _file2, file3, file4需要看起来像_file1, _file2, _file3, _file4

我对Unix脚本知之甚少,所以非常感谢一个简单的解释!

2 个答案:

答案 0 :(得分:1)

你可以使用这样一个衬垫:

import urllib.request,os,hashlib; h = 'df21e130d211cfc94d9b0905775a7c0f' + '1e3d39e33b79698005270310898eea76'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)

其中dir_with_files是搜索文件的上部目录。然后它找到名称不是从_开始的文件,并且每个文件都被重命名。

在进行任何更改之前,您可以使用params -n -v重命名,显示将执行的操作,而不实际执行它们。

find  dir_with_files -regextype posix-extended -type f -regex '^.*\/[^_][^\/]*$' -exec rename -v 's/^(.*\/)([^_][^\/]*)$/$1_$2/' '{}' \;

答案 1 :(得分:0)

从最好的Bash资源出发:

  1. 创建一个匹配所有相关文件的glob
  2. Loop通过所有匹配的文件。
    1. Remove文件名下划线,并将结果保存到变量。
    2. 在变量前加下划线。
    3. echo原始文件名后跟更改的文件名,使用正确的quotes检查它们是否正常(引号不会由echo打印,因为它们是语法)。
    4. 使用mv代替echo实际重命名文件。
  3. 另外:

    • 如果您的mv支持-n / --no-clobber,请使用它以避免在您陷入困境时数据丢失的可能性