我在/home/ziga/Mounted/
中有两个子目录。其中每个都有多个非空子目录:
/home/ziga/Mounted/dir1/subdir1-1
/home/ziga/Mounted/dir1/subdir1-2
...
/home/ziga/Mounted/dir2/subdir2-1
/home/ziga/Mounted/dir2/subdir2-2
...
有没有办法使用find
创建空目录,比如/home/ziga/CombinedMounts
,其名称与{{1}内的两个级别的名称完全相同}}?这是我正在寻找的最终结果:
/home/ziga/Mounted/
我可以使用此命令获取目录列表:
/home/ziga/CombinedMounts/subdir1-1
/home/ziga/CombinedMounts/subdir1-2
/home/ziga/CombinedMounts/subdir2-1
/home/ziga/CombinedMounts/subdir2-2
...
但我不能为我的生活弄清楚如何在find /home/ziga/Mounted/ -maxdepth 2 -mindepth 2 -type d ! -name "lost+found" ! -name ".Trash*" -exec basename {} \;
中使用它的输出,以便我得到所需的子目录。
不知何故,他们总是在mkdir -p
我失去了理智,请帮忙。 :)
注意:某些目录名称包含空格!
答案 0 :(得分:2)
试试这个:
find /home/ziga/Mounted/ -maxdepth 2 -mindepth 2 \
-type d ! -name "lost+found" ! -name ".Trash*" \
-exec sh -c 'mkdir -p /home/ziga/CombinedMounts/"$(basename "$0")"' "{}" \;
我只会解释你在问题中没有提到的部分。
我们调用了sh
,因为我们无法将{}
占位符可靠地传递给mkdir -p "/path/$(basename "{}")"
这样的表达式。使用占位符时,表达式也看起来不清楚。
-c
选项从命令字符串后面的操作数值设置参数0
的值(参见sh
的手册页):
-c
从command_string操作数读取命令。在command_name
操作数的值和位置参数($1
,$2
等)中设置特殊参数0的值(参见第2.5.2节,特殊参数)来自剩余参数操作数的序列。不应从标准输入读取任何命令。