我正在尝试构建一个 bash 单线循环遍历当前目录中的目录并将内容 tar 为唯一的 tar,使用目录名称作为 tar 文件名。我已经掌握了基础知识(找到目录名称,并用这些名称将它们保存起来),但是我的循环抛出了一些错误消息,我无法理解它从哪里获取它试图运行的命令。
这是最有效的单线:
for f in `ls -d */`; do `tar -czvvf ${f%/}.tar.gz $f`;done
“奇怪”的输出是:
-bash: drwxrwxr-x: command not found
-bash: drwxr-xr-x: command not found
-bash: drwxr-xr-x: command not found
-bash: drwxrwxr-x: command not found
我不理解我正在运行的命令的哪一部分并且正在生成该输出?
您需要删除
tar
命令周围的反引号。您可能还想通过管道ls
确保xargs
bash 正确选择所有目录:反引号正在捕获输出
tar
并尝试在循环的每次迭代中将其作为命令执行。tar
当您使用 -v 选项时,首先打印的是每个文件(例如drwxrwxr-x
)的权限。在这种情况下,您希望 bash执行tar 命令,而不是捕获输出。bjlaub关于周围的反引号是正确的
tar
,但是您不需要使用ls
:会做到这一点,并将正确处理带有空格的目录名称。
这里的其他答案很好,但我想添加另一个选项,以防您只需要获取目录而不是符号链接等:
希望这可以帮助!