簡體   English   中英

linux shell獲取文件名

[英]linux shell get name of file

我正在編寫shell腳本。

我有以下文件:

2012-03-08_16-37-41
2012-03-08_16-37-43
2012-03-08_16-37-46
2012-03-08_16-37-55

簡單的腳本:

#!/bin/bash
FILENAME= ????
echo $FILENAME

並且FILENAME值應為2012-03-08_16-37-55 (排序文件名列表的最后一個元素)。 此外,文件名的開頭應為2012

我怎么能解決這個問題?

FILENAME=$(ls -r 2012* | head -n 1)

不要解析ls輸出。 相反,使用find:

#!/bin/sh

find . -name 2012* | sort | tail -1

要將結果分配給變量:

#!/bin/sh

filename=$(find . -name 2012* | sort | tail -1)

這也使您可以訪問查找的所有選項 ,包括(不)遵循符號鏈接,遞歸,僅返回文件(不是目錄),檢查時間戳等。

您可以使用ls命令獲取文件,或者只使用“文件globbing”來擴展通配符。

#!/bin/sh

for filename in 2012*; do
  echo "File (by globbing) is $filename"
done

ls 2012* | while read filename; do
  echo "File (via ls) is $filename"
done

要獲得最后一個,最簡單的方法可能是對ls輸出進行排序:

filename=`ls -r 2012* | head -1`

但是如果你想弄亂的話,你也可以拖尾。

for filename in 2012*; do
  echo "File (by globbing) is $filename"
done | tail -1
f=""; 
for f in 2012* ; 
do
  # haha - don't do anything. 
  dummy=42
done; 
echo "now do something with $f"

不使用任何外部命令: set 2012*; eval FILE=\\$$# set 2012*; eval FILE=\\$$# 這是eval的完全安全使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM