2016-03-24 104 views
2

我可以tail -f最後一個修改後的文件使用ls --sort=time | head -1 | xargs tail -f但我正在尋找的東西,將不斷運行的第一部分以及,即如果一個新的文件創建tail命令正在運行,它將切換到拖曳新文件。我想過使用watch命令,但似乎並沒有與tail -f尾巴最後修改後的文件和顯示器中的新文件

+1

見http://superuser.com/questions/956311/continuously- detect-new-files-with-inotify-tools-within-multiple-directories-r – tripleee

回答

3

更好地工作,看來你需要的是這樣的:

#!/bin/bash 

TAILPID=0 
WATCHFILE="" 

trap 'kill $(jobs -p)' EXIT  # Makes sure we clean our mess (background processes) on exit 

while true 
do 
    NEWFILE=`ls --sort=time | head -n 1` 
    if [ "$NEWFILE" != "$WATCHFILE" ]; then 

      echo "New file has been modified" 
      echo "Now watching: $NEWFILE"; 
      WATCHFILE=$NEWFILE 
      if [ $TAILPID -ne 0 ]; then 
        # Kill old tail 
        kill $TAILPID 
        wait $! &> /dev/null # supress "Terminated" message 
      fi 
      tail -f $NEWFILE & 
      TAILPID=$!  # Storing tail PID so we could kill it later 
    fi 
    sleep 1 
done 
+0

這有一個顯而易見的問題,即解析'ls'並假定文件名不包含換行符。一個更強大的解決方案將使用'find',當然,[適當引用任何變量](http://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-variable),其中包含文件名。但這已被多次毆打致死;去尋找重複。 – tripleee

相關問題