我需要缩短外部硬盘驱动器上某些文件的名称,以便将它们存储在另一个加密驱动器上(加密不允许文件名长于42个字符)。我需要重命名的文件被组织在具有任意子文件夹深度的多个文件夹中。
我正在考虑两种选择:
你能帮助我一些选择吗?或者您还有其他建议吗?
答案 0 :(得分:2)
find
工具支持正则表达式,它提供了一种按长度过滤文件的简便方法:
find -E . -regex '.*/[^/]{43,}'
答案 1 :(得分:1)
<强>假设强>
您只想使用加密的驱动器进行备份,而不是日常使用。
<强>答案强>
在备份驱动器上创建zip
/ tar.gz
个文件以进行存储。这将保留文件的名称,权限和时间。
编辑假设没有成功。
选项#2:在加密的驱动器上创建虚拟文件系统。 Ask Different 上的This answer显示了如何使用MacZFS,但我不明白为什么你不能简单地使用HFS +。
答案 2 :(得分:1)
你可以在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,则显示完整的原始名称,基本名称的长度和基本名称。