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

Script to open latest text file from a directory

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

我需要一个逻辑来搜索并给出目录中的最新文件(文本文件的名称可以是任何东西(不固定),所以我需要找出最新的文本文件)

不是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)

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

#!/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

一行(如果确定只有文件的话):

vim `ls -t .|head -1`

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

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

if [ -f $FILE ];

或者您也可以使用查找,或使用管道获取最新文件:

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

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

vim $(ls -t | head -1)

为了按字母数字顺序编辑最新的,

vim $(ls -1 | tail -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,嵌入 换行符 的文件名将无法正确处理,但这很少是真正的-世界关注.