我需要一个shell脚本来打开给定目录中的最新文本文件。然后它将被复制到另一个目录。我怎样才能实现它?
我需要一个逻辑来搜索并从目录中提供最新文件(文本文件的名称可以是任何内容(不固定),所以我需要查找最新的文本文件)
答案 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
,嵌入了换行符的文件名无法正确处理,但这很少是现实世界关注。