私はブラウザから、厄介な数字のファイル名を持つ PDF ファイルを頻繁にダウンロードします。これらは自動的に に入ります~/Downloads
。理想的には、これらのファイルを次のようにして開けるようにしたいです。
evince "the most recently modified file"
~/Downloads
ファイル名を見つけるために開く必要はありません。
「最後に変更されたファイル」を指定する簡単な方法はありますかbash
?
注: 私はそれが可能これを実行するには、名前を確認するls -t
よりも簡単な解決策を探しています。~/Downloads
答え1
evince "$(ls -t | head -n1)"
スペース、タブ、(おそらく) 印刷特殊文字は処理されますが、ファイル名に改行文字が含まれている場合、およびその他の印刷されない文字が含まれている場合は機能しなくなります。
答え2
ls -t
これは、多少の複雑さは増しますが、よりも正確で堅牢なアプローチです。
設定
短いシェル スクリプト (以下のコード) を . に追加します$PATH
。 ~/bin
これは適切な場所です。
必ず確認してください
- スクリプトは実行可能である
chmod +x ~/bin/script_name
~/bin
あなたの$PATH
使用法
最新のファイルで実行するコマンドを~/Download
に渡しますlast_download
。
例
スクリプトに名前を付けると仮定するとlast_download
last_download
(引数なし):evince
デフォルトのコマンドを、~/Downloads
last_download mplayer
:mplayer
最新のファイルで実行~/Downloads
last_download cp -t ~/Desktop
: 最新のファイルをコピーし~/Downloads
ます~/Desktop
コード
#!/bin/sh
# Usage: last_download [cmd [options]...]
newest=
dir=~/Downloads
# default command
if [ $# -eq 0 ]; then
set -- evince;
fi
# find newest file
for f in "$dir"/*; do
if [ -z "$newest" ] || [ "$f" -nt "$newest" ]; then
newest="$f"
fi
done
if ! [ -e "$newest" ]; then
exit 1
fi
# run command on newest file
"$@" "$newest"
注: このスクリプトは内部を検索するだけです~/Download
が、任意のディレクトリをサポートするように一般化することは難しくありません。その場合、名前の変更も必要になります。
答え3
exec zsh
evince ~/Downloads/*.pdf(om[1])
またはzshに切り替えたくない場合は
cd ~/Downloads
zsh -c 'evince ./*.pdf(om[1])'
括弧内の部分はglob 修飾子. はom
、名前ではなく変更時刻を使用するように glob の順序を変更します (新しい順)。は、[1]
最初の一致のみを使用することを意味します。
答え4
いいえ、たとえあったとしても、一部のシステム ログが通常、最も最近更新されたファイルではないことは保証できません。
ケビンの答え(彼は私に先んじた)は、単に避けたいだけなら有効です手動でオープニング~/Downloads
。