我的问题与那些几乎相同,但是,它的解决方案不适用于我的情况。我想删除重复的扩展名(在我的情况下.zip.zip
)并且只有一个(即.zip
)。我试过了:
rename 's/.zip/.zip$/.zip/' *.zip.zip
和
find . -depth -name "*.zip.zip" -exec rename 's/\.zip\.zip$/.zip/' {} +
但在这两种情况下,都没有重命名文件。
我写了一个简单的 bash 脚本来转换视频文件。运行时,它首先创建output
目录,然后遍历所有.mp4
文件,转换它们并将结果放入output
目录。
mkdir output && for f in *.mp4; do echo $f; \
ffmpeg -loglevel warning -i $f -vf scale=1280:-2,fps=25 output/$f; done
我想在脚本中添加一项功能:循环所有子目录(但不包括当前目录本身),创建“输出”目录并执行转换。
通过使用以下代码,我设法在所有子目录中找到满足给定标准的所有文件:
for d in */; do
for f in "$d"/*.mp4; do
echo "$d"
file="${f##*/}"
echo "$file"
done
done
该脚本打印以下内容,这是正确的。
1/
01.mp4
2/
02.mp4
然而,这就是我所能做的。
假设有一个目录foo
,其中有文件:
$ ls
001.mp4
002.mp4
在另一个目录中时,bar
我希望拥有与 in 相同bar
但为空的文件。到目前为止我尝试了什么:
当bar
我执行时:
$ find ../foo -type f |xargs -0
我得到:
../foo/001.mp4
../foo/002.mp4
这给了我一个文件列表,但有相对路径,而我只需要文件名(带扩展名)。
当我将以下行放入~/.xbindkeysrc
GNOME 时,正确启动 application vlc
。
"vlc"
XF86Calculator
问题是我想运行一个 shell 脚本。当我将以下内容放入~/.xbindkeysrc
GNOME 时,不会启动我的脚本,而是启动计算器。
"/home/menteith/bin/audio.sh"
XF86Calculator
这是为什么?该脚本是可执行的,并且在从命令行运行时按预期工作。
更新
感谢@PRATAP,我知道当我在~/.xbindkeysrc
(即不是bash脚本)中使用编译程序并XF86Calculator
第一次按下按钮时它会启动我的程序,但是当我 XF86Calculator
第二次按下按钮时,我会启动计算器。
更新 2
感谢@Raffa,我尝试了另一种解决方案。我写了一个简单的C程序:
#include <stdio.h>
#include <stdlib.h>
int main() {
puts("Starting now:");
system("killall -s1 xbindkeys; /home/menteith/bin/audio");
return 0;
}
它杀死xbindkeys
然后运行包装器,然后运行脚本。但是,它仍然无法正常工作。在第二次和下一次之后calculator
正在启动。
更新 3 我的脚本在来自显示器 (HDMI) 的音频和来自 PC 的音频之间切换。
#!/usr/bin/env bash
output=$(pactl list cards |grep 'Active Profile:' | cut -d ':' -f 3)
if [ $output == "analog-stereo" ]; then
out="hdmi-stereo"
else
out="analog-stereo"
fi
echo test
# Set the choosen card profile as sink
pactl set-card-profile "alsa_card.pci-0000_00_1f.3" "output:${out}"
# Set the default sink to the new one
pacmd set-default-sink "alsa_card.pci-0000_00_1f.3.${out}" &> /dev/null
# Redirect the existing inputs to the new sink
for i in $(pacmd list-sink-inputs | grep index | awk '{print $2}'); do
pacmd move-sink-input "$i" "alsa_card.pci-0000_00_1f.3.${out}" &> /dev/null
done
我有一个目录,其中包含许多扩展名的文件。我想递归删除不以(扩展名在哪里)结尾的*.srt
文件(和*.srt
仅文件)。我提出了以下解决方案,它似乎工作正常,但是,我想知道它是否 100% 正确。-en.srt
srt
find . -name "*.srt" ! -name "*-en.srt" -type f -exec rm -rf {} \;
在bash
按CTRL+U清除当前光标位置之前的行上的字符,而在zsh
此将清除整行。如何通过按CTRL+ Uin清除当前光标位置之前的行上的字符zsh
?
我经常使用 Guake(GNOME 的下拉终端)。问题在于它显然存储了自己的命令历史记录,并且与标准 GNOME 终端的不同。我的 shell 是zsh
,它被配置为将它的命令历史存储在~/.zsh_history
. 如何Guake
使用存储在中的命令历史记录~/.zsh_history
?
说someprogram
只需要*.abc
文件作为命令行参数。在终端,当我这样做时
$ someprogram <tab>
我只想*.abc
列出要自动完成选项卡的文件。我怎么做?我使用的外壳是zsh
.
在bash
这种行为中,通过complete -f -X '!*.abc' someprogram