rmコマンドがAIXでwフラグを認識しないのはなぜですか?

rmコマンドがAIXでwフラグを認識しないのはなぜですか?

次のように、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
...

-wrmフラグやその他の奇妙なものがある場合-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

関連情報