列出所有用户目录并查找特定文件

时间:2019-08-14 09:43:02

标签: linux bash shell unix

我正在编写一个脚本,该脚本将检查所有具有主目录的用户的〜/中的特定文件。

我尝试了ls /home并将cd插入用户的主目录,但是它给参数带来了太多错误。

username=$(ls /home)
cd /home/$username
cat file.json

除了json文件的输出外,我没有,但是即使用户有json文件,也无法提供json文件的输出。

编辑:

现在我需要提取文件为file.json的用户的用户名,我尝试使用grep进行此操作,但是没有用。

files=$(find /home -name tilde.json -print)
echo "$files" >> jsons.txt
cat jsons.txt | grep /*/

4 个答案:

答案 0 :(得分:3)

这将在file.json目录下找到并列出所有名为/home的文件:

find /home -name file.json -print 

如果您无权访问所有用户的家庭目录,则可能需要将错误重定向到/dev/null

如果要打印所有这些文件的内容,请尝试:

find /home -name file.json -print -exec cat {} \;

要将搜索范围仅限制到/home下的目录(即不是/home本身,并且用户主目录中没有子目录),请使用:

find /home -mindepth 2 -maxdepth 2 -type f -name file.json -print -exec cat {} \;

我还在那里添加了-type标志,以将搜索限制到文件,并排除可能碰巧共享该名称的所有目录。

答案 1 :(得分:0)

这将做:

private void button1_Click(object sender, EventArgs e)
    {
        if (on)
        {
            button1.Text = "yes on top";
            IntPtr HwndTopmost = new IntPtr(-1);
            SetWindowPos(this.Handle, HwndTopmost, 0, 0, 0, 0, TopmostFlags);
            on = false;
        }
        else
        {
            button1.Text = "not on top";
            IntPtr HwndTopmost = new IntPtr(-2);
            SetWindowPos(this.Handle, HwndTopmost, 0, 0, 0, 0, TopmostFlags);
            on = true;
        }
    }

它将打印

  

cat:'/home/*/file.json':没有此类文件或目录

关于标准错误(如果找不到)。

答案 2 :(得分:0)

那又怎么样:

cd /home
find . -name file.json -maxdepth 1 -exec cat {} \;

答案 3 :(得分:0)

假设/home包含user1user2

然后您的cd命令被调用为

cd /home/user1 user2

这不是您想要的,也不是cd的有效语法,for仅接受一个参数。您可能希望改为使用set -x循环。

如果您无法预测此类扩展,则set +x会启用跟踪,这可能会提供对实际运行命令的了解,并会在此处显示您的问题。 getent再次将其关闭。

最后,请注意,并非所有用户的主目录都必须在主目录中。您可能要使用options: { watermark: { image: "//imgurlhere.jpg", x: 20, y: 10, width: 53, height: 60, opacity: 0.25, alignX: "left", alignY: "top", alignToChartArea: true, position: "back" }, }或类似名称来查找所有用户主目录。