从目录打开最新文本文件的脚本
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
,嵌入 换行符 的文件名将无法正确处理,但这很少是真正的-世界关注.
我需要一个 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
,嵌入 换行符 的文件名将无法正确处理,但这很少是真正的-世界关注.