Bash
辨識最新文件並將其分配給 shell 變數
我有一個
.jpg
不斷增長的文件目錄。我想在別處複製最新的一份。這是我目前擁有的並且它有效,只是好奇是否有更好的方法來辨識最新的 jpg 文件而不是使用ls
andtail
。#!/bin/bash cd /home/pi/JPGS fn=$(ls -rt1 | tail -1) mv -f $fn /home/pi/WWW/webpic.jpg
文件名中有許多字元會導致失敗。您可以通過以下方式改進它:
#! /bin/sh - cd /home/pi/JPGS || exit fn=$(ls -t | head -n1) mv -f -- "$fn" /home/pi/WWW/webpic.jpg
在列表上下文中不加引號的變數(在 Bourne-like shell 中,而不是
zsh
)是 split+glob 運算符,您幾乎不想這樣做。--
標記選項的結尾,因此"$fn"
如果以 . 開頭,則不會被視為選項-
。如果文件名包含換行符,但不包含空格、製表符、星號、問號、右方括號或以破折號開頭,這仍然會失敗。
最好在
zsh
這裡使用:#! /bin/zsh - mv -f /home/pi/JPGS/*.jpg(.om[1]) /home/pi/WWW/webpic.jpg
(.om[1])
是 glob 限定符,它們是一個zsh
特定的功能。將glob****限制.
為正常文件(不包括符號連結、目錄、設備……),om
是為了在修改時間上,並且只獲取第一個文件。[1]
請注意,如果要將其分配給 shell 變數,則必須是數組變數:
fn=(/home/pi/JPGS/*.jpg(.om[1]))
(並不是說它對你以後如何使用它有很大的影響)。