フォルダ内の最新のファイルを除くすべてのファイルを削除する方法は? [コピー]

フォルダ内の最新のファイルを除くすべてのファイルを削除する方法は? [コピー]

CentOS 7を使用しています。特定のディレクトリから最新のファイルを除くすべての「* .log」ファイルを削除したいと思います。私はこれを試しました

[rails@server ~]$ ls -t ~/.forever | tail -n +2 | xargs rm --
rm: cannot remove ‘pids’: No such file or directory
rm: cannot remove ‘5QEM.log’: No such file or directory
rm: cannot remove ‘sock’: No such file or directory
rm: cannot remove ‘8BVT.log’: No such file or directory
rm: cannot remove ‘lf4N.log’: No such file or directory
rm: cannot remove ‘Jf8F.log’: No such file or directory
rm: cannot remove ‘H1UG.log’: No such file or directory
rm: cannot remove ‘sNbx.log’: No such file or directory
rm: cannot remove ‘D30J.log’: No such file or directory
rm: cannot remove ‘_yj1.log’: No such file or directory
rm: cannot remove ‘Tz9c.log’: No such file or directory
rm: cannot remove ‘ur0M.log’: No such file or directory
rm: cannot remove ‘pX6o.log’: No such file or directory
rm: cannot remove ‘8P_i.log’: No such file or directory
rm: cannot remove ‘kBX_.log’: No such file or directory
rm: cannot remove ‘n4Ot.log’: No such file or directory
rm: cannot remove ‘VVdY.log’: No such file or directory
rm: cannot remove ‘T1QJ.log’: No such file or directory
rm: cannot remove ‘Zdeo.log’: No such file or directory
rm: cannot remove ‘5ejy.log’: No such file or directory
rm: cannot remove ‘dQEL.log’: No such file or directory

出力が何を意味するのかわかりませんが、何も削除されないことがわかりました。私は直接サブファイル(サブフォルダのファイルではない)を削除することにのみ興味があります。

答え1

検索を使用する:

これにより、現在のディレクトリの最新のファイルとフォルダを除くすべてのファイルが削除され、要求されたサブディレクトリではなく、直接フォルダの最新のファイルのみが確認されます。

find . -maxdepth 1 ! -path .  ! -wholename `find . -maxdepth 1  -printf '%T+ %p\n' | sort -n | tail -1 | cut -d " " -f2` -exec rm -rf {} \;

フォルダを削除せずにファイルのみを削除するには、次を使用します。-type f

find . -maxdepth 1 -type f  ! -path .  ! -wholename `find . -maxdepth 1  -printf '%T+ %p\n' | sort -n | tail -1 | cut -d " " -f2`  -exec rm -rf {} \;

例:

$ touch {1..100}
$ echo "hello" > 89
$ find . -maxdepth 1 -type f  ! -path .  ! -wholename `find . -maxdepth 1  -printf '%T+ %p\n' | sort -n | tail -1 | cut -d " " -f2`  -exec rm -rf {} \;
$ ls
89

答え2

zshを使う:

zsh -c 'rm ~/.forever/*.log(.om[2,-1])'

開梱:

  • ベースライングローブの使用~/.forever/*.log
  • 一般ファイルのみ選択( .)
  • o修正時間に基づいてソートします。m(これにより、最新のファイルが前のファイルの前に配置されます。)
  • 2このソートされたリストから最後の()までの範囲を選択してください。-1これにより、最新のファイルである要素#1が除外されます。
  • その後、渡されたファイルのリストになります。rm

引用:

答え3

ディレクトリに名前を一覧表示し.foreverますが、rm1 つ上のコマンドを実行します。同じ名前の重要なファイルがないことを願っています。

これをスクリプトに入れるには、cdファイルを削除したいディレクトリに直接置くのが最も簡単な方法ですが、xargs呼び出しにディレクトリ名を追加することもオプションです。

もちろん、未使用の出力に関する警告の説明はls有効ですが、あなたの場合、ファイル名によっては無視することができます。

関連情報