【问题标题】:How to find filenames longer than 42 chars on Mac OS如何在 Mac OS 上查找超过 42 个字符的文件名
【发布时间】:2015-10-21 09:16:56
【问题描述】:

我需要缩短外部硬盘驱动器上某些文件的名称,以便将它们存储在另一个加密驱动器上(加密不允许文件名超过 42 个字符)。我需要重命名的文件被组织在具有任意子文件夹深度的多个文件夹中。

我正在考虑两种选择:

  • 有没有办法在 Automator 中获取文件名超过 42 个字符的文件列表?然后我会手动重命名它们 - 我不希望它们太多。
  • 是否有一个简单但强大的 shell 脚本可以将文件名裁剪为特定长度(迭代地用于所有文件夹,递归地用于所有子文件夹)?如果多个文件名的裁剪导致相同的文件名,它也应该能够处理冲突。

你能帮我做一些选择吗?或者您还有其他选择建议吗?

【问题讨论】:

    标签: macos shell automator


    【解决方案1】:

    find 工具支持正则表达式,它提供了一种按长度过滤文件的简单方法:

    find -E . -regex '.*/[^/]{43,}'
    

    【讨论】:

      【解决方案2】:

      您可以在 shell 中执行此操作...find 将为您提供递归到子目录中的所有文件的列表,从 dot 开始 - 当前目录:

      find . 
      

      输出

      ./vips/libvips/tools/vipsedit.c
      ./vips/libvips/tools/vipsheader.c
      ./vips/libvips/tools/vipsprofile
      ./vips/libvips/tools/vipsthumbnail.c
      ./vips/libvips/vips-cpp.pc.in
      ./vips/libvips/vips.pc.in
      ./vips/libvips/vipsCC.pc.in
      

      那么awk 可以告诉你长度:

      find . | awk '{l=length($0);print length,$0}'
      

      输出

      33 ./vips/libvips/tools/vipsheader.c
      32 ./vips/libvips/tools/vipsprofile
      36 ./vips/libvips/tools/vipsthumbnail.c
      29 ./vips/libvips/vips-cpp.pc.in
      25 ./vips/libvips/vips.pc.in
      27 ./vips/libvips/vipsCC.pc.in
      

      或者,如果您只想要长度超过 32 的:

      find . | awk '{l=length($0);if(length>32)print length,$0}'
      

      输出

      43 ./vips/libvips/tools/batch_image_convert.in
      42 ./vips/libvips/tools/batch_rubber_sheet.in
      37 ./vips/libvips/tools/light_correct.in
      36 ./vips/libvips/tools/shrink_width.in
      33 ./vips/libvips/tools/vipsheader.c
      36 ./vips/libvips/tools/vipsthumbnail.c
      

      或者你可以使用这个:

      find . | awk '{base=$0;sub(/.*\//,"",base);x=length(base);if(x>42)print $0,x,base}'
      

      awk 在 $0 中获取整行,然后将其复制到 base。然后它会剥离所有内容,直到最后一个斜线,并将其重新保存为base。然后它获取base 的长度,如果大于 42,则显示完整的原始名称、基本名称的长度和基本名称本身。

      【讨论】:

      • 谢谢!那是非常有用和详细的!
      【解决方案3】:

      假设

      您只想将加密驱动器用于备份,而不是用于日常使用。

      回答

      创建文件的zip/tar.gz 以存储在备份驱动器上。这将维护文件的名称、权限和时间。

      编辑假设不成立。

      选项#2:在加密驱动器上创建一个虚拟文件系统。 Ask Different 上的This answer 展示了如何为此使用 MacZFS,但我不明白为什么不能简单地使用 HFS+。

      【讨论】:

      • 好主意 - 投我一票!顺便说一句,在 OSX 上,您只需右键单击目录/文件夹并选择 Compress,它就会为您制作 ZIP。
      • 干杯马克。我更喜欢tar,因为它保留了更多元数据(符号链接等):) 我认为这个问题没有完美的解决方案;如果 OP 想要实际使用加密驱动器上的文件,那么这个答案没有任何价值。
      • 假设用例实际上是一个好主意。它可以让我摆脱复制问题。但是,我想不时访问加密驱动器上的文件。在这些情况下,我想避免下载 >40GB 的文件并解压缩它。的确,我可以将文件拆分到多个文件夹中,这可能会减小单个文件的大小——但这对我来说不是很方便。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 2011-07-08
      • 2012-12-11
      • 2020-04-04
      相关资源
      最近更新 更多