設定

設定

私はブラウザから、厄介な数字のファイル名を持つ 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]最初の一致のみを使用することを意味します。

詳細については、「zsh で glob をフィルターするにはどうすればよいか」に対するこの回答

答え4

いいえ、たとえあったとしても、一部のシステム ログが通常、最も最近更新されたファイルではないことは保証できません。

ケビンの答え(彼は私に先んじた)は、単に避けたいだけなら有効です手動でオープニング~/Downloads

関連情報