在终端的各个选项卡中打开所有子目录

在终端的各个选项卡中打开所有子目录

我想在终端的不同选项卡中打开当前文件夹的所有子目录。

我尝试了类似该线程中提出的解决方案,但它会在新终端中打开目录,而不是在当前终端的新选项卡中打开目录。

https://stackoverflow.com/questions/21591757/open-a-tab-and-running-a-script-using-gnome-terminal-tab-option-on-ubuntu

根据此帖子:

在当前终端中打开新选项卡的命令

我尝试过这个:

#!/bin/sh

for d in ./*/ ; do (xdotool key ctrl+shift+t && cd "$d"); done 

但是,这会多次打开当前目录,但不会打开子目录。

答案1

如果希望所有选项卡都在一个新的终端窗口而不是当前窗口打开,则可以使用下面这样的操作,而不是使用模拟按键xdotool

find "$(realpath .)" -mindepth 1 -maxdepth 1 -type d -printf "--tab --working-directory '%p'\n" | xargs gnome-terminal

解释:

以更易读的方式格式化:

find "$(realpath .)" \
     -mindepth 1 -maxdepth 1 -type d \
     -printf "--tab --working-directory '%p'\n" | 
xargs gnome-terminal

它的作用是:

  • realpath .获取当前目录的绝对路径
  • find [...]以指定的方式列出作为第一个参数的目录内符合以下条件的所有文件和文件夹。

    • -mindepth 1-maxdepth 1禁用递归,这样您只能直接从搜索文件夹内部获取结果,而不包含该文件夹本身和子目录。
    • -type d将结果限制为仅限目录,没有文件等。
    • -printf "[...]"告诉find使用以下格式字符串将其找到的结果打印到其标准输出。%p将被结果的路径替换,从搜索目录开始(这就是为什么我们realpath之前使用它来使其成为绝对的而不是仅仅使用.

    到目前为止,仅运行管道之前的部分的输出|如下所示:

    --tab --working-dir '/tmp/test/folder1'
    --tab --working-dir '/tmp/test/folder2'
    --tab --working-dir '/tmp/test/folder3'
    
  • xargs将上面的输出通过管道传输到其标准输入中。它将读取所有输入行并使用它们构建和运行命令行,方法是将它们附加到其自己的参数中。使用上述示例运行的结果命令将是:

    gnome-terminal --tab --working-dir '/tmp/test/folder1' --tab --working-dir '/tmp/test/folder2' --tab --working-dir '/tmp/test/folder3'
    

现在,构造的命令将打开一个新gnome-terminal窗口,每个参数一个选项卡--tab,并将每个参数之后--tab(以及下一个参数之前)的所有参数应用于该特定选项卡。--working-dircetory /PATH/TO/SOMEWHERE将初始工作目录设置为给定的文件夹。

相关内容