用于从目录中打开最新文本文件的脚本

时间:2015-10-09 04:17:57

标签: linux bash shell unix posix

我需要一个shell脚本来打开给定目录中的最新文本文件。然后它将被复制到另一个目录。我怎样才能实现它?

我需要一个逻辑来搜索并从目录中提供最新文件(文本文件的名称可以是任何内容(不固定),所以我需要查找最新的文本文件)

5 个答案:

答案 0 :(得分:4)

不是bash的专家,但您可以尝试这种逻辑:

首先,使用ls -t -t按时间排序获取最新文件head -1获取第一个文件

F=`ls -t * | head -1`

然后使用和编辑器打开文件:

xdg-open $F
gedit $F
...

根据@ AJefferiss的建议,您可以直接执行:

xdg-open $(ls -t * | head -1)
gedit $(ls -t * | head -1)

答案 1 :(得分:4)

在这里你可以做这样的事情

#!/bin/sh

SOURCE_DIR=/home/juned/Downloads
DEST_DIR=/tmp/

LAST_MODIFIED_FILE=`ls -t ${SOURCE_DIR}| head -1`
echo $LAST_MODIFIED_FILE

#Open file
vim $SOURCE_DIR/$LAST_MODIFIED_FILE

#Copy file
cp $SOURCE_DIR/$LAST_MODIFIED_FILE $DEST_DIR
echo "File copied successfully"

您可以指定要在其中打开该文件的任何应用程序名称,例如gedit,kate等。此处我已使用vim

xdg-open - 在用户的首选应用程序中打开文件或URL

答案 2 :(得分:1)

在一行中(如果您确定只有文件):

vim `ls -t .|head -1`

它将在vim中打开(或使用其他txt编辑器)

如果有目录你应该用循环编写脚本并测试每个文件(如果它不是dir):

if [ -f $FILE ];

或者您也可以使用find,或使用pipe获取最新文件:

ls -lt .|sed -n 2p|grep -v '^d'

答案 3 :(得分:1)

用于编辑最新修改/创建的

vim $(ls -t | head -1)

要编辑最新的字母数字顺序,

vim $(ls -1 | tail -1)

答案 4 :(得分:1)

现有答案很有帮助,但在处理带有嵌入空格或其他shell元字符的文件名时却不尽如人意。 [1]

# Get the most recently modified *.txt file.
# (On *assignment*, names with spaces, ... are not a concern.)
f=$(ls -t *.txt | head -n 1) 

# *Use* the variable enclosed in *double-quotes* to ensure that it is passed
# to the target command unmodified.
xdg-open "$f"      # could also use "$(ls -t *.txt | head -n 1)" directly

此外,有些人回答用户全大写的shell变量名,should be avoided以避免与 environment 变量发生冲突。

[1]由于使用了ls,嵌入了换行符的文件名无法正确处理,但这很少是现实世界关注。