1

如果我这样做find ./,我会得到类似的结果:

/Volumes/FulfilmentArray//.Trashes/1060/ffmpeg2pass-0.log.mbtree.temp

有没有办法执行find ./命令只返回文件名和容器文件夹?在上述情况下,它将是:

1060/ffmpeg2pass-0.log.mbtree.temp
4

4 回答 4

2
find ./ | rev | cut -d/ -f-2 | rev
于 2013-01-24T23:38:16.717 回答
2
find ./ | rev | cut -d/ -f-2 | rev

一点解释可能会有很长的路要走。使用的命令:

  • rev:反转每一行中的字符顺序。(手册页
  • cut:从文件的每一行中删除部分。(手册页

所以前面的代码是用一个例子做的:

  1. 打印出相对于当前目录的所有文件的路径

    ./Machine Learning - Stanford/Self-notes/08-10.txt
    
  2. 反转路径字符串

    txt.01-80/seton-fleS/drofnatS - gninraeL enihcaM/.
    
  3. 在第二个正斜杠处剪切字符串,留下第一部分(因此包括文件名和包含文件夹,相对于执行 find 的文件夹的位置)

    txt.01-80/seton-fleS --separated here-- /drofnatS - gninraeL enihcaM/.
    
  4. 反转结果

    Self-notes/08-10.txt
    
于 2013-01-24T23:54:50.530 回答
1

我敢肯定 awk 可以换成 sed。自从您说文件名以来,我添加了“-type f”标志,但是如果您也想要目录,只需将其删除即可。

find ./ -type f|awk -F'/' '{ print $(NF-1)"/"$NF }'
于 2013-01-24T23:42:53.437 回答
0

这可能是一种解决方法:

find . | awk -F "/" '{ if (NF > 2) { print $(NF-1) "/" $NF; } else { print $NF; }}'
于 2013-01-24T23:45:37.583 回答