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.

관련 정보