我想询问运行命令“find”时收到的错误消息。在下一段中,我将解释我想要实现的目标。
我有一个父文件夹。该文件夹内有许多子文件夹。每个子文件夹内都有很多子子文件夹。我想列出包含特定数量文件的子子文件夹。我运行 for 循环如下:
#!/bin/bash
in=PATH_TO_THE_PARENT_FOLDER
for i in ${in}/*; do
find ${i} -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n | grep -w 69 | awk '{print $2}' #69 represent the total number of files within a folder
done
此代码输出以下错误消息sh: MPR_Range: No such file or directory
。我用谷歌搜索寻找其含义的解释sh: MPR_Range
,但找不到任何答案。
答案1
假设您有一个名为foo&bar
.xargs
现在将运行命令
sh -c 'echo -e $(find foo&bar | wc -l) foo&bar'
它在后台运行,并且有echo
两个.对于, 和 也类似。find
bar
foo;bar
$(bar)
不要{}
在参数中使用sh -c
,而是将文件名作为单独的参数,即
... |xargs sh -c 'echo -e $(find "$1" | wc -l) "$1"' sh {} | ...
此外,您可以使用find -exec
以下代替xargs
:
find -type d -exec sh -c 'echo ...' \;
我也不确定是否sort
有必要,如果您grep
无论如何都要去查找具有特定数字的行。