我遇到了许多需要chgrp将组从根更改为需要从文件名获取的组的文件,以下是示例文件列表:

-rw-r----- 1 root root           412K Aug  3 10:44 alexa.sqlite
-rw-r----- 1 root root           3.9M Aug  3 10:44 beta.sqlite
-rw-r----- 1 root root            16M Apr  2 21:34 carlo.sqlite
-rw-r----- 1 root root            66M Aug  3 10:44 delta.sqlite
-rw-r----- 1 root root           2.5M Aug  3 05:40 zeta.sqlite

我需要将这些文件的组更改为.sqlite部分之前的文件名所拥有的组,因此所需的输出为:

-rw-r----- 1 root alexa           412K Aug  3 10:44 alexa.sqlite
-rw-r----- 1 root beta            3.9M Aug  3 10:44 beta.sqlite
-rw-r----- 1 root carlo            16M Apr  2 21:34 carlo.sqlite
-rw-r----- 1 root delta            66M Aug  3 10:44 delta.sqlite
-rw-r----- 1 root zeta            2.5M Aug  3 05:40 zeta.sqlite

单独的命令将是:

chgrp zeta zeta.sqlite

但需要循环通过每个文件/文件名,目前被这难住了,任何帮助都非常感激,谢谢.

推荐答案

#!/bin/bash
shopt -s nullglob
for f in *.sqlite; do
  if ! chgrp "${f%.sqlite}" "$f"; then
    echo "$f ownership cannot be changed."
  fi
done

在包含.sqlite文件的目录中运行它.

注意:如果没有.sqlite文件,Shopt是为了防止出现错误.

Linux相关问答推荐

Docker 不保留 chown 用户设置

如何在具有多种可能性的linux shell中获取最大值和最小值?

如何比较 2 个文件并将第二个文件的所有行打印到输出文件 awk

如何拆分和计算 Bash 中单词的出现次数?

如何删除文件中不需要的字符(使用 shell 脚本)

将文件的一部分插入到另一个文件的特定位置

awk/sed 命令仅在模式 2 匹配时打印模式 1

如何将通配符参数传递给 bash 文件

从 shell 将多个 .sql 转储文件导入 mysql 数据库

在 Ubuntu 中重启 Nginx

让 Tk 看起来像一个原生 Linux 应用程序

低功耗蓝牙:在 linux 中监听通知/指示

如何从 linux 的命令行将 Sublime Text 2 文件打开到选项卡,而不是新窗口

在亚马逊 ec2 linux 微型实例上的 virtualenv 中安装 scipy 时遇到问题

如何在 shell 脚本中向文件中添加一行?

从 FTP 服务器下载所有文件

有什么方法可以在linux中保留但不提交内存?

cat、grep 和 cut - 翻译成 python

如何在 linux 或 unix 上找到用户的主目录?

当我已经 ssh 进入远程机器时,如何 scp 回到本地?