小编for*_*rin的帖子

用于搜索和查看/下载 YouTube 视频的 CLI 实用程序

是否有一个实用程序可以从命令行搜索 YouTube,然后根据用户输入查看下载搜索结果?

\n\n
$ youtube-search madonna\n\n1 Madonna - Hung Up (Official Music Video)\nmadonna \xe2\x99\xa9 180M views 9 years ago\nhttps://www.youtube.com/watch?v=EDwb9jOVRtU\n"Hung Up" by Madonna from Confessions On A Dance Floor, available now.\n\n2 Madonna - Like A Prayer (Official Music Video)\nmadonna \xe2\x99\xa9 69M views 9 years ago\nhttps://www.youtube.com/watch?v=79fzeNUqQbQ\n2006 WMG Like A Prayer.\n\netc.\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后你可以输入:

\n\n
    \n
  • “v1”观看视频1(使用VLC等)
  • \n
  • “d1-3”下载视频1-3(使用youtube-dl等)
  • \n
  • “n”查看下一页搜索结果
  • \n
\n\n

到目前为止我尝试过的:

\n\n

googler部分与 YouTube 配合使用,但由于某种原因,在搜索“麦当娜”时仅显示两个搜索结果。此外,也无法在查看和下载之间进行选择。

\n\n

youtube-dl有搜索功能,但似乎不打印搜索结果也不接受用户输入。youtube-dl -j ytsearch:madonna列出有关搜索结果的元数据,但似乎不包含所需的视频链接、标题和说明。

\n

youtube search youtube-dl

4
推荐指数
1
解决办法
7334
查看次数

带有空格的文件名在 echo 中的 perl 命令中

如何在以下命令中支持带空格的文件名?

echo "$(perl -MMIME::Base64 -e 'open F, shift; @lines=<F>; close F; print MIME::Base64::encode(join(q{}, @lines))' $filename)"
Run Code Online (Sandbox Code Playgroud)

我尝试了以下似乎不起作用的方法:

  1. echo ... \"$filename\")
  2. echo '$(... "open..." "$filename")'
  3. echo $(...'open ... "$filename")

perl

3
推荐指数
1
解决办法
130
查看次数

对 Bash 脚本的作业控制

我有一个一千行的 Bash 脚本,每行都包含一个ffmpeg命令。我从source script它开始,它运行得很好。

然而,当我尝试以各种方式控制这个脚本时,事情完全出错了:

  • 如果我这样做Ctrl + Z暂停整个事情,只有当前的 ffmpeg命令被暂停,下一个开始!不是我想要的!
  • 如果我Ctrl + C要停止一切,脚本会跳转到下一个ffmpeg命令,我必须对脚本中的每一行按一次才能最终停止一切。纯粹的地狱。
  • 我尝试ps -ef从另一个 shell使用来定位source命令以从那里暂停/终止它,但它不存在于列表中。

那么我怎样才能按照我希望的方式暂停/停止父脚本呢?或者,我如何才能以不同的方式开始执行脚本,让我对它进行适当的控制?

ffmpeg job-control shell-script

2
推荐指数
1
解决办法
1032
查看次数

将制表符分隔的字段转换为变量的紧凑方法

在 Bash 中,我将字段从一行读出到一个数组中。让我强调一下,性能是一个问题,所以我负担不起任何会产生子进程的东西。

为了使代码更具可读性,我希望将字段转换为变量:$width${array[0]}. 我必须手动设置每个变量,像这样,重复很多:

while read line; do

  array=($line)
  width=${array[0]}
  height=${array[1]}
  size=${array[2]}
  date=${array[3]}
  time=${array[4]}

  # use $width, $height, etc. in script

done < file
Run Code Online (Sandbox Code Playgroud)

有没有什么紧凑的方法可以做到这一点,比如listPHP 中的指令?

list($width, $height, $size, $date, $time) = $array;
Run Code Online (Sandbox Code Playgroud)

bash array csv

1
推荐指数
1
解决办法
2562
查看次数

在终端上连续打印文件的最后一行到单行

我怎样才能持续一个文件的最后一行打印到单一的终端线?

以下工作,但具有高性能命中。

while true; do tail -1 /tmp/somelog | tr "\012" "\015"; done
Run Code Online (Sandbox Code Playgroud)

tail

1
推荐指数
1
解决办法
1655
查看次数

ps 如何测量每个进程的 %CPU(这可以更改吗?)

执行时ps -r -e -o pcpu=,comm=,显示每个进程的 CPU 百分比,该值是在多长时间内测量的?是一秒钟吗?手册页似乎没有提到这一点。

还有一个后续问题:是否可以ps(或另一个标准 UNIX 实用程序)报告较长时间内(例如 5 秒)每个进程的 CPU 百分比?(显然,人们可以收集 5 个值并计算平均值,但我不确定这是否正确......)

附言!如果重要的话,我使用的是 macOS(运行 BSD 变体)。

cpu ps

1
推荐指数
1
解决办法
1547
查看次数

递归目录中的快速字符串替换

如何使用带有空格单引号的递归目录和文件名进行快速文本替换?最好使用标准的 UNIX 工具,或者一个众所周知的包。

find对于许多文件,使用速度非常慢,因为它为每个文件生成一个新进程,因此我正在寻找一种将目录遍历和字符串替换集成为一个操作的方法。

慢搜索:

find . -name '*.txt'  -exec grep foo {} \;
Run Code Online (Sandbox Code Playgroud)

快速搜索:

grep -lr --include=*.txt foo
Run Code Online (Sandbox Code Playgroud)

缓慢替换:

find . -name '*.txt' -exec perl -i -pe 's/foo/bar/' {} \;
Run Code Online (Sandbox Code Playgroud)

快速更换:

# Your suggestion here
Run Code Online (Sandbox Code Playgroud)

(这个速度相当快,但是是两次传递并且不处理空格。)

perl -p -i -e 's/foo/bar/g' `grep -lr --include=*.txt foo`
Run Code Online (Sandbox Code Playgroud)

recursive replace

0
推荐指数
1
解决办法
1213
查看次数

覆盖较少的默认值

如果我有LESS='-FRX'一个默认的环境变量,作为规则的例外,我怎么能less只运行-R,即。覆盖/无效-FX

less

0
推荐指数
1
解决办法
80
查看次数

标签 统计

array ×1

bash ×1

cpu ×1

csv ×1

ffmpeg ×1

job-control ×1

less ×1

perl ×1

ps ×1

recursive ×1

replace ×1

search ×1

shell-script ×1

tail ×1

youtube ×1

youtube-dl ×1