作为家庭作业的一部分,我发现很难执行以下两个命令。你能否纠正其中的错误。提前致谢
编写一个程序,它将获取一个包含一组目录的文件 查看这些目录及其子目录中的任何名为core的文件。* 和* .o并将打印所有此类文件的报告。 (你可以使用find)
对于上述程序,我试图这样做。
cat prog1 | xargs find /$0 -name 'core.*' or '*.o'
但是我收到以下错误。 (prog1是包含目录列表的文件)
find: paths must precede expression: perl
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
接下来的问题是:
编写一个将通过/ etc / passwd文件的脚本,并从此打印系统中的用户列表,他们的主目录和他们正在使用的shell
我尝试了以下内容:
awk '{print "USER \t\t HOME \t\t BASH \n split($0,a,":")}
{print $a[1] \t\t $a[6] \t\t $a[7]}' /etc/passwd
我尝试使用谷歌搜索并查看人员条目,但我不明白错误。您也可以为初学者提供一些有用的shell脚本编写链接吗?
答案 0 :(得分:1)
Write a program, that will take a file which has a set of directories, and will
look into these directories and their sub directories for any files named core.*
and *.o and will print a report of all such files found. (you can use find)
我建议关注oneliner:
find `paste -s -d' ' directories.list` -type f -name 'core.*' -or -name '*.o'
其中directories.list
包含目录名称,逐行显示。
Write a script that will go through the /etc/passwd file, and from this print a
list of users in the system, their home directory and the shell that they are
using
试试这个:
awk -F: 'BEGIN{print "USER\t\tHOME\t\tSHELL"}{printf("%s\t\t%s\t\t%s\n", $1, $6, $7)}' /etc/passwd
答案 1 :(得分:0)
提示1:find
不理解“或”。 运算符遵循与其他选项相同的模式。
提示2:awk
可以使用自定义分隔符/ 字段分隔符。