shell 脚本常用命令,音频提取、格式转换、切割

2023-05-16

实现一下功能:

1,mp4 视频文件提取 wav,pcm;

2,wav 切割为每段30s 的音频;

3,wav 切割后的音频转换为 pcm,ffmpeg无法将 pcm 文件切割

# 用 /bin/bash,需要执行 bash  test.sh
# 用 /bin/bash ,执行 sh test.sh,会报错,可修改为: sudo ln -s /bin/bash  /bin/sh

$0 是脚本本身的名字,$1 是给脚本传的第一个参数,$2 是传的第二个

 root_dir="./data_video"     #注意:"=" 两边不能有空格!

traversal_test.sh : 遍历文件夹

#!/bin/sh
# create date: 2022.04.14
# 用 /bin/bash,需要执行 bash  test.sh
# 用 /bin/bash ,执行 sh test.sh,会报错,可修改为: sudo ln -s /bin/bash  /bin/sh

function getdir(){
    for  element  in `ls $1`      # $0 是脚本本身的名字,$1 是给脚本传的第一个参数,$2 是传的第二个参数
    do 
        # echo $element                #文件名(不带路径)
        dir_or_file=$1"/"$element
        # echo  $dir_or_file          #文件名(带路径)
        if [ -d $dir_or_file ]        # -d filename: 如果 filename为目录,则为真
        then 
            getdir $dir_or_file   #再次调用getdir()
        else
            echo $dir_or_file
        fi 
    done
}
root_dir="./data_video"     #注意:"=" 两边不能有空格!
getdir $root_dir

if [ $suffix = 'mp4' ]    #字符串变量,注意:[]里面两边需要空格

ffmpeg_v2a.sh :将音频从视频中提取出来

#!/bin/bash
# create  by  cw, date: 2022.04.14 
# https://www.jianshu.com/p/eba436d46904
#` `和$( ) :在 bash shell 中,$()与``都是用来做命令替换的
# $和{ } 的用处:用来作变量替换
# 实现音频提取,转换,切割

# traversal for single folder 
vedio_to_audio(){
    startTime=`date +%Y.%m.%d-%H:%M:%S` 
    startTime_s=`date +%s`      #从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数(时间戳)
    # echo ${PWD}                           #当前路径

    # folder="./data_video/"
    # for  file_a  in  ${folder}*
    # for  file  in  `ls   $folder`
    for  file  in  `ls   $1`            # $0 是脚本本身的名字,$1 是给脚本传的第一个参数,$2 是传的第二个参数
    do
        # echo  $file                      #文件名(不带路径)
        dir_or_file=$1'/'$file    #加上路径
        # echo  $dir_or_file       #文件名(带路径)
        in_filename=$dir_or_file
        file=${in_filename##*/}      #文件名: D01_20220330013446.mp4
        filename=${file%.*}              #无后缀: D01_20220330013446
        suffix=${file##*.}                   #后缀: mp4
        # echo $file, $filename, $suffix
        # out_filename="$1"/data_audio/"${filename}".wav""    # new  filename 
        out_filename="$1"/data_audio/"${filename}".pcm""    # new  filename 
        # out_filename="$1"/"${filename}".mp3""    # new  filename 
        # echo  $in_filename
        # echo  $out_filename

    if  [ $suffix = 'mp4' ]            #字符串变量,注意:[]里面两边需要空格
    # if  [ $num  -eq  8 ]             #整数变量
    then
        # echo  "This is a mp4 file"        # print  for  test
        # ffmpeg  -i  $in_filename  -acodec pcm_s16le  -f  s16le  -ac  1 -ar  8000  -f  wav    $out_filename           # *.wav
        ffmpeg  -i  $in_filename  -acodec pcm_s16le  -f  s16le  -ac 1  -ar  8000    $out_filename          # *.pcm
        # ffmpeg  -i  D01_20220330013446.mp4  -acodec pcm_s16le  -f  s16le  -ac  1 -ar  8000  -f  wav  D01_20220330013446.wav
        # ffmpeg  -i  D01_20220330013446.mp4  -acodec pcm_s16le  -f  s16le  -ac 1  -ar  8000  D01_20220330013446.pcm
        # ffmpeg  -i  D01_20220330013446.mp4 -q:a  0  -map  a  D01_20220330013446.mp3
    fi

done
     endTime=`date +%y.%m.%d-%H:%M:%S` 
     endTime_s=`date +%s`
     sumTime=$(( endTime_s - startTime_s )) 
     echo "$startTime ---> $endTime" "Total: $sumTime seconds"
}

# traversal for multiple folder 
function getdir(){
    startTime1=`date +%Y.%m.%d-%H:%M:%S` 
    startTime_s1=`date +%s`      #从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数(时间戳)
    for  element  in `ls  $1`      # $0 是脚本本身的名字,$1 是给脚本传的第一个参数,$2 是传的第二个参数
    do 
        # echo $element               #文件名(不带路径)
        dir_or_file=$1"/"$element      #加上路径
        # echo  $dir_or_file         #文件名(带路径)
        if [ -d $dir_or_file ]           # -d filename: 如果 filename 为目录,则为真
        then 
            getdir $dir_or_file      #文件为目录,再次调用getdir()
            echo $dir_or_file        # print  for  test
        else
            # echo $dir_or_file    # print  for  test 
            ##### file processing #####
            file=${dir_or_file%/*}     #获取路径
            # echo $file                             # print  for  test
            # 如果目录不存在,则新建并处理
            if [ ! -d  "$file"/data_audio"" ];          # !-d filename: 如果目录不存在
            then
            mkdir  "$file"/data_audio""               #如果目录不存在,则新建并处理
            vedio_to_audio  $file                            # convert from vedio to audio
            echo  "$file"/data_audio"": file  has  been  created !
            else
            echo  "$file"/data_audio"": file  already  exist !
            fi
        fi 

    done
    endTime1=`date +%y.%m.%d-%H:%M:%S` 
    endTime_s1=`date +%s`
    sumTime1=$(( endTime_s1 - startTime_s1 )) 
    echo "$startTime1 ---> $endTime1" "Total: $sumTime1 seconds"
}


# traversal for multiple folder  to cut 
function getdir_cut(){
    startTime1=`date +%Y.%m.%d-%H:%M:%S` 
    startTime_s1=`date +%s`      #从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数(时间戳)
    for  element  in `ls  $1`      # $0 是脚本本身的名字,$1 是给脚本传的第一个参数,$2 是传的第二个参数
    do 
        # echo $element                #文件名(不带路径)
        dir_or_file=$1"/"$element      #加上路径
        # echo  $dir_or_file          #文件名(带路径)
        # ls -lh $dir_or_file
        # mediainfo  $dir_or_file

        if [ -d $dir_or_file ];           # -d filename: 如果 filename 为目录,则为真
        then 
            getdir_cut $dir_or_file      #文件为目录,再次调用 getdir_cut()
            # echo $dir_or_file        # print  for  test
        else
            # echo $dir_or_file    # print  for  test 
            ##### file processing #####
            # file=${dir_or_file%/*}     #获取路径
            file_new=${dir_or_file%.*}        #去掉后缀
            file_suffix=${dir_or_file##*.}     #得到后缀
            # echo $file_new                      # print  for  test
            # echo  $file_suffix
            # 如果目录不存在,则新建并处理
            # if [ ! -d  "$file"/data_audio"" ];        # !-d filename: 如果目录不存在
            #  if [ ! -d  $file_new  -a  $file_suffix = 'pcm' ] ;                    # -a: and   -o: or
            if [ ! -d  $file_new  -a  $file_suffix = 'wav' ] ;                    # -a: and   -o: or
            # if [ ! -d  $file_new ] && [ $file_suffix = 'wav' ] ;           # 如果目录不存在,并且是wav文件
            then
            mkdir  $file_new           #如果目录不存在,则新建并处理
            audio_cut  $file_new                   #audio  cut  start !
            echo  $file_new: file  has  been  created !
            fi
        fi 

    done
    endTime1=`date +%y.%m.%d-%H:%M:%S` 
    endTime_s1=`date +%s`
    sumTime1=$(( endTime_s1 - startTime_s1 )) 
    echo "$startTime1 ---> $endTime1" "Total: $sumTime1 seconds"
}

audio_cut(){
    audio_in=$1
    audio_name=${audio_in##*/}       # D01_20220330013446
    # echo $audio_name               # print  for  test
    num=1
    while [ $num -le 142 ]       # -lt :小于 less than,-le :小于等于 less than and be equal to
    do
    # if  [ -e $1'.pcm' ];            #如果文件存在
    if  [ -e $1'.wav' ];            #如果文件存在
    then
        let  time_stamp=num*30
        #音频截取 -t 时间,同步
        # ffmpeg  -i  D01_20220330013446.wav  -ss 00:00:00  -t 00:00:30  output.wav 
        # ffmpeg  -i  D01_20220330013446.wav  -ss 0  -to 60  output.wav        #截取到 60s 时间戳
        # ffmpeg  -i  D01_20220330013446.wav  -ss 0  -t  30  output.wav         #截取长度为 30s
        # ffmpeg  -i  $1'.pcm'  -ss  $time_stamp  -t  30   $1/$audio_name'_'$num'.pcm'          #截取长度为 30s
        ffmpeg  -i  $1'.wav'  -ss  $time_stamp  -t  30   $1/$audio_name'_'$num'.wav'          #截取长度为 30s

        # 删除文件过小的文件!
        # 获取文件大小的四种方式
        # du -sh D01_20220330013446.wav | awk '{print $1}'
        # ls -lh D01_20220330013446.wav | awk '{print $5}'
        # wc -c D01_20220330013446.wav | awk '{print $1}'
        # stat -c "%s" D01_20220330013446.wav 

        # value=$(du -s  $1/$audio_name'_'$num'.wav' | awk '{print $1}')
        # value=$( ls -l  $1/$audio_name'_'$num'.pcm'  | awk '{print $5}')
        value=$( ls -l  $1/$audio_name'_'$num'.wav'   | awk '{print $5}')
        # value=$(du -s D01_20220330013446.wav  | awk '{print $1}')
        echo  "value:" $value
        if [ $value -le '200' ] ;     #文件大小不超过 200 bit
        then
            # rm   $1/$audio_name'_'$num'.pcm' 
            # echo "delete  $1/$audio_name'_'$num'.pcm'  success !"
            rm   $1/$audio_name'_'$num'.wav' 
            echo "delete  $1/$audio_name'_'$num'.wav'  success !"
            break
            echo  "break while loop !"
        fi

        let  num++        # num add  
    fi
    done
}


# traversal for multiple folder to transform wav  to pcm 
function getdir_wav2pcm(){
    startTime1=`date +%Y.%m.%d-%H:%M:%S` 
    startTime_s1=`date +%s`      #从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数(时间戳)
    for  element  in `ls  $1`       # $0 是脚本本身的名字,$1 是给脚本传的第一个参数,$2 是传的第二个参数
    do 
        # echo $element                #文件名(不带路径)
        dir_or_file=$1"/"$element      #加上路径
        # echo  $dir_or_file          #文件名(带路径)
        if [ -d $dir_or_file ];           # -d filename: 如果 filename 为目录,则为真
        then 
            getdir_wav2pcm $dir_or_file         #文件为目录,再次调用 getdir_wav2pcm()
            # echo $dir_or_file        # print  for  test
        else
            # echo $dir_or_file    # print  for  test 
            ##### file processing #####
            file_route=${dir_or_file%/*}     #获取路径
            file_folder_name=${file_route##*/}
            file_new_pcm=${file_route%/*}'/data_pcm_cut'
            file_new=${dir_or_file%.*}        #去掉后缀   
            file_name=${file_new##*/}
            file_suffix=${dir_or_file##*.}    #得到后缀
            # echo 00$file_new                      #./data_video/data_cut/D01_20220330024453/D01_20220330024453_99
            # echo 11$file_suffix
            # echo 22$file_route                   #./data_video/data_cut/D01_20220330024453
            # echo 33$file_new_pcm          #./data_video/data_cut/data_pcm_cut
            # echo 44$file_name                  #D01_20220330024453_99
            # echo  $file_folder_name       #D01_20220330024453
            # pause()                    #程序暂停

            # 如果目录不存在,则新建并处理
             if [ ! -d  $file_new_pcm ] ;    
             then
             mkdir  $file_new_pcm         
             fi 
             if [ ! -d  $file_new_pcm'/'$file_folder_name ] ; 
             then
             mkdir  $file_new_pcm'/'$file_folder_name
             fi              

            # if [ ! -d  "$file"/data_audio"" ];        # !-d filename: 如果目录不存在
            if [ $file_suffix = 'wav' ] ;                    # -a: and   -o: or
            # if [ ! -d  $file_new ] && [ $file_suffix = 'wav' ] ;           # 如果目录不存在,并且是wav文件
            then
            file_path_pcm=$file_new_pcm'/'$file_folder_name'/'$file_name'.pcm'
            ffmpeg -i  $dir_or_file  -acodec pcm_s16le  -f  s16le  -ac 1  -ar  8000  $file_path_pcm
            echo  $file_new_pcm: file  has  been  created !
            fi
        fi 
    done
    endTime1=`date +%y.%m.%d-%H:%M:%S` 
    endTime_s1=`date +%s`
    sumTime1=$(( endTime_s1 - startTime_s1 )) 
    echo "$startTime1 ---> $endTime1" "Total: $sumTime1 seconds"
}


############### function call #################
# traversal for single folder !
# audio_dir="./data_video"
# audio_dir="/data/datasets/SED_202204/data_mp4"
# vedio_to_audio $audio_dir

# traversal for multiple folder !
# root_dir="./data_video"     #注意:"=" 两边不能有空格!
# root_dir="/data/datasets/SED_202204/data_mp4" 
# getdir $root_dir

# traversal for multiple folder to cut
# audio_dir="./data_video"
# audio_dir="/data/datasets/SED_202204/data_pcm"     # ffmpeg无法对pcm裁剪,需要wav转pcm!
# audio_dir="/data/datasets/SED_202204/data_wav" 
# getdir_cut  $audio_dir

# traversal for multiple folder to transform  wav  to pcm 
# audio_dir="./data_video/data_cut"
audio_dir="/data/datasets/SED_202204/data_wav_cut"     
getdir_wav2pcm $audio_dir

 ***************************** 获取文件大小*********************

# awk 主要用来处理文件,将文本按照指定的格式输出。其中包含变量,循环以及数组。

# awk [选项] '匹配规则和处理规则' [处理文本路径]

# awk -F: '{print $1}' /etc/passwd

# 标准输出 | awk [选项] '匹配规则和处理规则'

# cat /etc/passwd | awk -F: '{print $1}'

du
du -sh D01_20220330013446.wav | awk '{print $1}'
ls
ls -lh D01_20220330013446.wav | awk '{print $5}'
wc
wc -c D01_20220330013446.wav | awk '{print $1}'
stat
stat -c "%s" D01_20220330013446.wav

Shell 获取单个文件大小的几种方式 | 温欣爸比的博客

Shell中获取单个文件大小_rockly89的博客-CSDN博客_shell 获取文件大小

 ***************************** 分割线 ****************************

# file=${in_filename##*/}  #分别使用/和.作为分隔符来进行处理

# filename=${file%.*}

# suffix=${file##*.}

# echo $file, $filename, $suffix

# explain for #, %, ##, %% -- so useful

# ${in_filename##*/} # 从左边开始删除str中最大匹配(*/ 的字符串

# ${in_filename%/*} #从右边开始删除str中最小匹配/* 的字符串

# ${in_filename##*.} #从左边开始删除file中最大匹配*. 的字符串

# ${in_filename%.*} #从右边开始删除file中最小匹配.* 的字符串

# ${in_filename%%.*} #从右边开始删除file中最大匹配 .* 的字符串

# ${in_filename#*.} #从左边开始删除file中小匹配*. 的字符串

# #:表示从左边算起第一个

# %:表示从右边算起第一个

# ##:表示从左边算起最后一个

# %%:表示从右边算起最后一个

Linux shell中提取文件名和路径_yuyuena的博客-CSDN博客_shell获取路径中的文件名

 ***************************** 分割线 ****************************

Shell 脚本中 '$' 符号的多种用法 

通常情况下,在工作中用的最多的有如下几项:
$0:Shell 的命令本身
$1 到 $9:表示 Shell 的第几个参数
$? :显示最后命令的执行情况
$#:传递到脚本的参数个数
$$:脚本运行的当前进程 ID 号
$*:以一个单字符串显示所有向脚本传递的参数
$!:后台运行的最后一个进程的 ID 号
$-:显示 Shell 使用的当前选项

参考博客:
Shell 脚本中 '$' 符号的多种用法_Jack Tian的博客-CSDN博客_shell中$

  ***************************** 分割线 ****************************

``和$( )的区别:
在 bash shell 中,$()与``(反引号Esc键下面那个键) 都是用来做命令替换用的。
区别在于``须要额外的跳脱( \` )处理。举个例子:
 cmd1 `cmd2 \`cmd3\` `表示先执行cmd3,执行完之后交给cmd2再执行,最后再执行cmd1。

$和{ } 的用处:
用来作变量替换。
一般情况下,$var 与 ${var} 并没有啥不一样,但是用 ${ } 会比较精确的界定变量名称的范围。

( )和{ }的区别:
()和{}都是对一串的命令进行执行,但有所区别:
相同点:
()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开
不同点:
()只是对一串命令重新开一个子shell进行执行,{}对一串命令在当前shell执行
()最后一个命令可以不用分号,{}最后一个命令要用分号
()里的第一个命令和左边括号不必有空格,{}的第一个命令和左括号之间必须要有一个空格
()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令 

  ******************************* 整数计算****************************

二、shell变量---变量的数学运算,let i++实例_ 清欢渡.的博客-CSDN博客_shell 变量++

 expr命令_Linux expr命令:四则远算和字符串运算

整数运算:
方法一:expr
echo $(expr 2 + 4)
expr  2 \* 5
expr \( 10 + 6 \) \* 3 + 10
方法二:$(( ))
echo $((1+2*5))
方法三:$[ ]
echo $[4*5-2]
方法四:let
let sum=2**4
echo $sum


小数运算:
awk 'BEGIN{…}' 可以进行小数运算
awk 'BEGIN{print 1/3+0.1}'

$(())的使用:
用来作整数运算
在 bash 中,$(( )) 的整数运算符号大致有这些:
+ - * / :分别为 "加、减、乘、除"。
% :余数运算
& | ^ !:分别为 "AND、OR、XOR、NOT" 运算。
a=5; b=7; c=2
echo $(( a+b*c ))

(()) 用于整数之间常用的运算符,效率高
let :用于整数运算,类似于(())
let 命令的语法格式为:

let  表达式
let "表达式"
let '表达式'

例子:

i=2
let i+=2
echo $i

  ******************************* 算术比较 **************************** 

[]和[[]]的异同点:
1.相同点:
二者都支持算术比较和字符串比较表达式(具体使用可能有点不同)
条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
2.不同点:
"["是一条命令, 与test等价,大多数shell都支持。
"[[",是关键字,许多shell(如ash bsh)并不支持这种方式

"[":逻辑与:"-a";逻辑或:"-o";"[[":逻辑与:"&&";逻辑或:"||"

[ expr ] 等于 test expr,对 test 命令来说, 用 -eq 要进行数字比较,而你此时传入字符串,就报错了。
[[]]用 -eq 进行数字比较时,不会报错,因为它直接把非整数的字符串直接转换成了 0 

[[ ... ]]进行算术扩展,而[ ... ]不做
$ [[ 99+1 -eq 100 ]]&&echo true||echo false

四、shell中``和$()、$(())、${}、[]和[[]]使用_这个名字想了很久的博客-CSDN博客

 ***************************** 分割线 ****************************

linux 下shell中 if 的“-e,-d,-f”的意思

文件表达式
-e filename 如果 filename存在(exist),则为真
-d filename 如果 filename为目录(directory),则为真 
-f filename 如果 filename为常规文件(),则为真
-L filename 如果 filename为符号链接(link),则为真
-r filename 如果 filename可读,则为真 
-w filename 如果 filename可写,则为真 
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
filename1 -nt filename2 如果 filename1比 filename2新,则为真。
filename1 -ot filename2 如果 filename1比 filename2旧,则为真。

整数变量表达式
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于

字符串变量表达式
If  [ $a = $b ]                 如果string1等于string2,则为真
                                字符串允许使用赋值号做等号
if  [ $string1 !=  $string2 ]   如果string1不等于string2,则为真       
if  [ -n $string  ]             如果string 非空(非0),返回0(true)  
if  [ -z $string  ]             如果string 为空,则为真
if  [ $sting ]                  如果string 非空,返回0 (和-n类似) 

    逻辑非 !                   条件表达式的相反
if [ ! 表达式 ]
if [ ! -d $num ]               如果不存在目录$num

    逻辑与 –a                   条件表达式的并列
if [ 表达式1  –a  表达式2 ]

    逻辑或 -o                   条件表达式的或
if [ 表达式1  –o 表达式2 ]
 

参考资料:

linux 下shell中if的“-e,-d,-f”是什么意思

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell 脚本常用命令,音频提取、格式转换、切割 的相关文章

  • 在 awk 中按特定顺序打印文件

    我正在关注这个链接https stackoverflow com a 54599800 10220825 https stackoverflow com a 54599800 10220825 file txt Iteration 1 RA
  • 使用 grep 仅打印上下文

    Using grep http www computerhope com unix ugrep htm 您可以打印与您的搜索查询匹配的行 添加一个 C选项将打印两行周围的上下文 如下所示 gt grep C 2 lorem some con
  • Shell 脚本对文件进行计数,然后删除最旧的文件

    我是 shell 脚本新手 所以我需要一些帮助 我有一个充满备份的目录 如果我有超过 10 个备份文件 我想删除最旧的文件 以便仅留下 10 个最新的备份文件 到目前为止 我知道如何计算文件数 这看起来很简单 但是如果计数超过 10 我该如
  • 重写 openshift maven 脚本 (jenkins gear)

    我在 Openshift 上有 Jenkins 实例 我已启用 Jenkins 构建我的 Openshift 应用程序 这里是 Jenkins shell 脚本的一部分并记录它们生成的内容 Sync any libraries rsync
  • if ["$i" -gt "$count"];出现错误

    我试图将 f count f 1 f 2 名称放入数组中 下面是代码 echo Enter the count read count echo count arr i 1 while true do if i gt count then e
  • 命令行/shell 帮助文本是否有“标准”格式?

    如果没有 是否有事实上的标准 基本上我正在编写命令行帮助文本 如下所示 usage app name options required input required input2 options a argument Does someth
  • 使用 sed 和 pstree 显示正在使用的终端类型

    我一直在尝试仅显示用作名称的终端类型 例如 如果我使用 konsole 它会显示 konsole 到目前为止我一直在使用这个命令 pstree A s 输出这个 systemd konsole bash pstree 我有以下内容可以从该行
  • Ansible 权限问题

    我正在尝试将当前用户添加到系统中的某个组 然后执行需要该组权限的命令 我的剧本是这样的 name Add this user to RVM group sudo true user state present name vagrant ap
  • 使用 ls 和 grep 列出具有特定扩展名的文件

    我只想从当前目录获取文件 并且只输出 mp4 mp3 exe 文件 没有其他内容 所以我想我可以这样做 ls grep mp4 grep mp3 grep exe 但不会 因为第一个 grep 将仅输出 mp4 因此其他 2 个 grep
  • 使用单个 shell 脚本运行 React 和 Flask

    我构建了一个使用 ReactJS 作为前端和 Flask 作为中间件的应用程序 我可以使用以下命令序列来执行它 npm start cd Equation Solver python m flask run 执行第一个命令后 我必须打开另一
  • Emacs 退出终端

    在 Emacs 中运行终端模式时使用M x term using C x C o我无法切换到另一个缓冲区来继续处理事情 我知道这是可能的M x shell但使用此命令时 shell 的某些方面不起作用 less more 手册页等 我想知道
  • 如何通过管道将输入和输出传送到交互式 shell?

    我正在尝试构建一个应用程序 使用户能够与命令行交互式 shell 例如 IRB 或 Python 进行交互 这意味着我需要将用户输入通过管道传输到 shell 并将 shell 的输出返回给用户 我希望这会像管道 STDIN STDOUT
  • 在 Linux 中使用仅限 CLI 的工具生成磁盘使用情况图/图表

    在这个问题中 https stackoverflow com questions 32230 tracking down where disk space has gone on linux有人询问如何在 Linux 中显示磁盘使用情况 我
  • 如何替换带引号的多单词字符串作为参数?

    我正在尝试替换包含多个带引号的单词的字符串变量作为命令的参数 因此 给出以下示例脚本 请注意 shebang 中的 x 这会导致输出被记录到 stderr bin bash x myArg hello world echo string i
  • 从“stdin”读取文件后如何使用“input()”?

    Context 我想要一个简单的脚本 它可以选择多个管道输入中的一个 而不需要EOF when reading a lineUnix Linux 上的错误 它试图 接受多行管道文本 等待用户选择一个选项 将该选项打印到标准输出 所需用途 p
  • shell 脚本无法将命令行输出保存到变量中

    我正在尝试执行 shell 命令 然后使用 shell 脚本将输出保存到变量中 所以我使用这样的反引号 out ls l print out 该代码工作正常 我可以将它用于任何其他 shell 命令 但是当我尝试执行 python vers
  • Linux shell 命令逐块读取/打印文件

    是否有一个标准的 Linux 命令可以用来逐块读取文件 例如 我有一个大小为 6kB 的文件 我想读取 打印第一个 1kB 然后是第二个 1kB 看来猫 头 尾在这种情况下不起作用 非常感谢 你可以这样做read n在循环中 while r
  • Bash 完成脚本在某些参数选项后完成文件路径

    我正在为命令行工具编写 bash 完成脚本 plink local cur prev opts COMPREPLY cur COMP WORDS COMP CWORD prev COMP WORDS COMP CWORD 1 opts 1
  • 如何拆分一行并重新排列其元素?

    我在一行中有一些数据 如下所示 abc edf xyz rfg yeg udh 我想呈现如下数据 abc xyz yeg edf rfg udh 以便打印备用字段并用换行符分隔 有没有这样的衬里 下列awk脚本可以做到这一点 gt echo
  • 使用 cURL 从 shell 发布 4GB 文件

    我尝试将文件大小为 4GB 的文件发布到 REST API cURL 不会上传此大小的文件 而是 POST 内容长度为 0 的文件 curl v i d work large png H Transfer Encoding chunked

随机推荐

  • docker 镜像的复制

    docker 镜像的复制 有时候我们打的镜像需要从一台服务器传到另一台服务器 xff0c 但是奈何公司的服务器是只能连接内网的 这时候我们就需要能对docker的镜像进行复制 粘贴 整体思路就是 先在本地对镜像打包 然后通过ftp工具传到
  • FastDFS 搭建与客户端编写

    FastDFS 搭建与客户端编写 文件服务器 服务器搭建 https github com qbanxiaoli fastdfs 客户端编写 依赖 span class token tag span class token tag span
  • Linux 常用命令

    常用命令 1 yum 1 1 简介 yum 全称 xff08 Yellow dog Updater Modified 他是一个sheel前端软件包管理器 基于RPM包管理 xff0c 能够从指定的服务器自动下载RPM包并且安装 xff0c
  • 面对idea无厘头问题的两板斧

    1 啥都正常但是飘红 今天工程 所有import都飘红 但是 编译和运行都正常 解决 File gt Invalide Cache 2 工程结构不能识别 在idea中工程目录信息是控制在 idea 文件夹下面的 xff0c 有时候我们在一个
  • 开发中遇到的英语单词

    工作英语 metrics 指标resiliency 弹性 exchange 交换机 本来是交换 但是在系统中可以理解为邮局 即接受消息并发送消息的地方fuss 麻烦primitive 原始的 简陋的declarative 声明式的Relay
  • 来简单认识下简单的布隆过滤器

    布隆过滤器 1 简介 布隆过滤器是一种数据结构 主要由 一个 bit数组和一组hash函数组成 1 1优点 占用空间小 xff0c 效率高 1 2缺点 对于判断存在 是一个概率事件 而不是确定事件 2 作用 用来告诉我们 某个量 在一个量很
  • Gazebo 9 参考手册

    Gazebo参考文档 gazebo plugin参数含义
  • 手写一个布隆过滤器

    span class token keyword public span span class token keyword class span span class token class name BloomFilter span sp
  • INVALID TASK ‘.TEST.SKIP=TRUE’: YOU MUST SPECIFY A VALID LIFECYCLE PHASE […]

    问题 当我们在用如下命令行进行编译时 mvn Dmavne test skip span class token operator 61 span ture clean span class token function install s
  • 回到Zookeeper

    回到Zookeeper 1 藕花深处 平时会花时间学习Redis RocketMQ Motan Dubbo xff0c Kafka等中间件 xff0c 它们各有各的概念 xff0c 各有各的用途 我自认为自己在编程学习上并没有什么天分 xf
  • ChatGPT帮我实现LRU

    1 内存受限 不知道从什么时候开始 xff0c 什么东西都有了限制 xff0c 一个咖啡杯只能装下500ml水 xff0c 一块新买的内存也被标好了容量 xff0c 姑娘的心里再装不下另一个人 xff0c 我开始怀疑有什么东西是可以无限的
  • ACK 与外星文明进行交流

    一段故事 在 三体 第三部中 xff0c 蓝色空间号和万有引力号上的船员从三维空间进入四维空间 xff0c 看到了宏伟的四维建筑 xff0c 并与它们进行了交流 让我们来看一段原文 按照计划 xff0c 卓文用中频电波发送了一个问候语 这是
  • 预写日志 做一个靠谱的男人

    书接上回 我们在之前的一篇文章 ACK 与外星文明交流 中针对一个问题 两个节点之间的通信不可靠 提出了ack的解决方案 现在 我们为了消息能原子性和持久性的落盘 也面临一个问题 假如一条要写入磁盘的信息写到一半 xff0c 机器崩溃了怎么
  • 下载任意版本vmware对应的vmware tools

    参考博客 xff1a https baijiahao baidu com s id 61 1636060669707508136 amp wfr 61 spider amp for 61 pc 网址 xff1a http softwareu
  • 荣耀 MagicBook Pro 加装固态硬盘

    电脑于2019年10月1日在华为天猫官方商城抢购 xff0c 6099 机器配置 xff1a 咨询华为商城的客服 xff0c 得到的回复 xff1a 荣耀 MagicBook Pro 最大可以扩展 HDD 2TB xff0c 可以更换 SS
  • linux下usb无线网卡对比

    2021年12月23日 冬月二十 xff0c 天晴 xff0c 微风 一 使用场景 1 xff0c 由于软件开发需要用到linux系统 xff0c 嵌入式设备nvidia xavier没有无线网卡 xff0c 需要自购 2 xff0c 另外
  • 树莓派安装花生壳软件 phddns ,没有显示SN码

    树莓派型号 xff1a Pi4B 2G 树莓派系统版本 xff1a uname a Linux raspberrypi 5 10 103 v7l 43 1529 SMP Tue Mar 8 12 24 00 GMT 2022 armv7l
  • mavros订阅PX4的定高激光以及悬停油门估计数据

    借用已有的Altitude这个话题发布定高数据和基础油门估计 备注 xff1a v 1 11 3之后的PX4固件才加入了基础油门估计 在src modules mavlink mavlink messages cpp的class Mavli
  • E: Could not get lock /var/lib/dpkg/lock

    ubuntu安装软件时 xff0c 经常出现下面错误 xff1a sudo apt get install E Could not get lock var lib dpkg lock open 11 Resource temporaril
  • shell 脚本常用命令,音频提取、格式转换、切割

    实现一下功能 xff1a 1 xff0c mp4 视频文件提取 wav xff0c pcm xff1b 2 xff0c wav 切割为每段30s 的音频 xff1b 3 xff0c wav 切割后的音频转换为 pcm xff0c ffmpe