想象一下,我有一个包含这些文件的目录:
file-1.txt file-2.txt ...
我想为我的bash写一个条件并检查是否存在 file-2.txt 然后将输出写入 file-3.txt
示例bash脚本文件:
while read line;do
<A command here> #could be anything
if [ "$?" -eq "0" ]; then
echo "$line" >> file-$counter.txt #Pay attention to counter here
fi
done < $LIST
当bash运行完毕并停止时。然后我想再次运行它。现在我想知道如果最后一个文件是等等等,然后告诉计数器将输出写入新文件。
答案 0 :(得分:1)
您可以使用一系列命令获取文件的最后一个数字,然后添加一个以获取下一个命令:
pax> ll file-*.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-1.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-10.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-11.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-12.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-13.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-14.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-15.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-2.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-3.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-4.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-5.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-6.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-7.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-8.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-9.txt
pax> next=$(expr $(ls -1 file-*.txt |sed 's/file-//;s/.txt$//' |sort -nk1 |tail -1) + 1)
pax> echo $next
16
然后你可以用它来创建下一个:
pax> touch file-${next}.txt
pax> ll file-*.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-1.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-10.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-11.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-12.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-13.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-14.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-15.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:23 file-16.txt <== here it is
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-2.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-3.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-4.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-5.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-6.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-7.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-8.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-9.txt
按命令断开该行向下命令:
ls -1 file-*.txt # get all files one per line.
sed 's/file-//;s/.txt$//' # get rid of "file-" and '.txt', leaves numbers only.
sort -nk1 # numerically sort (1..15).
tail -1 # get last entry only (15).
expr $(... + 1) # add one (16).
next=$(...) # assign it to "next" variable.
解析ls
的输出并不总是一个好主意,因为文件名有时可能包含不常见的字符。但是,如果你能保证它们符合你的规格,那就可以了。