次のように、AIXの最後の5つのコピーを保持するbashスクリプトがあります。
rm `ls -lt /path/the_file_* | tail -n +6`
ただし、次のエラーが発生します。
rm: Not a recognized flag: w
修正する
このls
コマンドは以下を返します。
-rw-r--r-- 1 user group1 14 Mar 11 09:54 the_file_20130311.bz2
これについての手がかりはありますか?
答え1
あなたが言うことは本質的に
rm -rw-r--r-- 1 user group1 14 Mar 11 09:54 the_file_20130311.bz2
つまり。再帰削除の名前は次のとおりです。
1
user
group1
14
Mar
...
-w
rmフラグやその他の奇妙なものがある場合-rw-r--r--
より良いオプションはを使用することです。出力がttyに行くかどうかを検出ls -t
できるため、別の行にいなくても心配しないでください。ls
たとえば、次のようになります。
ls -t | cat
しかし、別の問題が発生します。つまり、正しいディレクトリにないということです。だからあなたが言うのは実際に現在のディレクトリから/path/
。
したがって、最初に正しいパスにあることを確認したり、find
システムにGNUをインストールしたりできる場合、他のオプションは次の方向になります。
find /path/to/files -maxdepth 1 -type f -name 'the_file_*' -printf '%T@ %p\n' |
sort -nr | head -n6 | cut -f2- -d" "
正しいリストを取得するにはフルパスが必要です。
その後、良く見える場合は、rm
ルーチンに追加してください。
答え2
コマンドは何を返しますかls ...
?コマンドが実行され、出力が引数として提供されることに注意してくださいrm
。出力を「ファイル名」にするものはありません。-w
実際にファイルが存在する場合(おそらくAIX--
に閉じるフラグがある可能性がある)、必要があります。rm -- ...
修正する:
ああ、脳が水に浸った。ファイル名だけでなく、および(上記のように)権限もls -l
フラグとして使用されます。あなたがしなければならないこと:-rw...
rm
rm `ls -t /path/the_file_* | tail -n +6`
いくつかのコマンド(これは他の多くのコマンドが採用したGNUルールです)は--
「フラグがここで終わる」ことを意味します。したがって、名前の-rf
付いたファイルを削除するには、これを行うとrm -- -rf
通常はdon't pick up false flagsと言うことができますcmd -flags -x -y -- anything goes here
。