我有一個關於使用shell來讀取文件的問題。也就是說,我有這樣的文件夾:文件名前綴測試總是在bash中失敗
文件夾
- new_file.log(這是一個文件)
- new_file2.log(這是一個文件)
- new_file3.log (這是一個文件)
- 新的(這是一個子文件夾)
- new_file_from_subfolder.log
- new_file2_from_subfolder.log
- new_file3_from_subfolder.log
我想要的是讀取(直接)的文件,而不是從子文件夾中文件的所有內容。在上述情況下,我需要new_file.log到new_file3.log。
我知道有一個簡單的方法:
$ cat new*.log
,但我也喜歡寫bash腳本:
for file in $(ls -a)
do
if [[ "$file" != "." && "$file" != ".." ]]; then
if [[ -f "$file" && "$file" == "^new" ]]; then **here is the problem**
[do something]
fi
fi
done
我的問題被標記爲以上。 bash的代碼似乎不列入像
"$file" == ^new
如果我運行bash的,它基本上是什麼都不做,這意味着文件不符合條件。 有什麼不對嗎?
不要** EVER **在腳本中使用'ls'。請參閱http://mywiki.wooledge.org/ParsingLs – 2014-11-21 01:22:19
...如果您想讓*中的文件迭代隱藏文件,'shopt -s dotglob'會產生這種效果。 – 2014-11-21 01:23:42
...另外,在shell中使用'=='不是一個特別好的習慣,除了在數學上下文中; POSIX指定'='作爲'test'的非數字相等運算符;支持'=='的炮彈是作爲非標準規定的擴展。它不像'[[]]'中的練習那麼糟糕,因爲它無論如何都不是POSIX,但手指記憶將(安全)'[[$ foo == $ bar]]'轉換爲(不安全) )''「$ foo」==「$ bar」]'或'test「$ foo」==「$ bar」',這兩者都需要'='以便攜帶。 – 2014-11-21 01:25:49