私はとんでもない数字のファイル名を持つ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])'
括弧の間のビットは次のとおりです。グローバル予選。om
名前の代わりに変更時間を使用するようにグローブの順序を変更します(最新のエントリから)。[1]
最初の一致のみが使用されることを意味します。
詳細については、次を参照してください。これは、「zshでグローブをフィルタリングする方法」への答えです。。
答え4
いいえ、一部のシステムログファイルが最近更新されても通常は更新されていないかどうかはわかりません。
ただ避けたい場合は、Kevinの答え(彼が私に勝ちました)が効果的です。手動開かれる~/Downloads
。