CV 演算法工程師作為耗時間耗藍條的工種,工作效率不提升就會整日淹沒在指令碼里,分享 15 個常用 shell 命令,每個都可以舉一反三,也可以新增到 alias,給短暫的生命續一秒。
- 遞迴統計目錄下的檔案數目
ls -lR | grep "^-" | wc -l
- 遞迴找出目錄下所有的 JPG 圖片, 可通過管道輸入到檔案
find $PWD | xargs ls -d | grep ".jpg$"
- 迴圈執行某個命令
while true; do $do_something; date; sleep 10; done
- 檢視 GPU 狀態及相關程式
nvidia-smi | tee /dev/stderr | awk '/ C / {print $3}' | xargs -r ps -up
- 時間戳轉換
date -d @1590044013
# Thu May 21 14:53:33 CST 2020
- 遍歷當前檔案下,對特定檔案/目錄執行某個操作
for f in $(ls $PWD); do if [ "${f##*.}"x = "mp4"x ]; then $do_something; fi ; done
- 提高 PATH 相關變數列印的可讀性
echo -e ${PATH//:/\\n}
- AVI 轉 MP4
ffmpeg -i sample.avi -c:v libx264 -pix_fmt yuv420p sample.mp4
- 隨機返回文字里 10 行
shuf -n 10 sample.txt
- 查詢目標在第幾行
grep -n 'my_target_string' sample.txt
- 按照 1/10 均勻抽取
sed -n ‘1~10p’ sample.txt > sample.10in1.txt
- 通過文字(存放相對路徑)指定需要同步的檔案
rsync -avz —files-from=sample.txt . username@ip:/path/to/remote
- 文字里的相對路徑轉成絕對路徑
sed -i "s#^#$PWD#" sample.txt
- 將當前目錄下的所有任意命名的圖片轉成視訊(注意 shape,yuv 引數)
input=/path/to/input
output=/path/to/output.mp4
ffmpeg -y -r 16 -f image2 -s 1280x720 -pattern_type glob \
-i $input/\*.jpg -vf \
drawtext="fontfile=/usr/share/fonts/open-sans/OpenSans-Regular.ttf: text='%{frame_num}': fontcolor=red: fontsize=40: x=(w-tw)/2: y=0.95*h" \
-vcodec libx264 -crf 8 -pix_fmt yuv420p $output
- 視訊拼接
ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex "[0:v]pad=iw:ih*2[a];[a][1:v]overlay=0:h" vert.mp4 # 上下拼接
ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex "[0:v]pad=iw*2:ih*1[a];[a][1:v]overlay=w" hori.mp4 # 左右拼接
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -filter_complex "[0:v]pad=iw*2:ih*2[a];[a][1:v]overlay=w[b];[b][2:v]overlay=0:h[c];[c][3:v]overlay=w:h" grid.mp4 # 四宮格
有愛自取,裡面的命令都可以靈活使用,遇到問題就留言~
本作品採用《CC 協議》,轉載必須註明作者和本文連結