Câu trả lời:
Đừng bận tâm kiểm tra nếu tập tin tồn tại, chỉ cần cố gắng loại bỏ nó.
rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null
Lưu ý rằng lệnh thứ hai sẽ thất bại (trả về trạng thái thoát khác không) nếu tệp không tồn tại, nhưng lệnh đầu tiên sẽ thành công nhờ tùy chọn -f
(viết tắt là --force
). Tùy thuộc vào tình huống, đây có thể là một chi tiết quan trọng.
Nhưng nhiều khả năng, nếu bạn đang nối thêm vào tệp đó là do tập lệnh của bạn đang sử dụng >>
để chuyển hướng một cái gì đó vào tệp. Chỉ cần thay thế >>
bằng >
. Thật khó để nói vì bạn đã cung cấp không có mã.
Lưu ý rằng bạn có thể làm một cái gì đó như thế test -f /p/a/t/h && rm /p/a/t/h
, nhưng làm như vậy là hoàn toàn vô nghĩa. Hoàn toàn có thể thử nghiệm sẽ trả về đúng nhưng / p / a / t / h sẽ không tồn tại trước khi bạn cố xóa nó, hoặc tệ hơn là thử nghiệm sẽ thất bại và / p / a / t / h sẽ được tạo trước khi bạn thực thi lệnh tiếp theo, nó sẽ không tồn tại. Cố gắng đây là một điều kiện đua cổ điển. Đừng làm điều đó.
rm /p/a/t/h 2> /dev/null
sẽ không giữ mã trả về ( echo $?
) là 0 nếu tệp không tồn tại. Điều đó sẽ khiến loại công việc của Jenkins thất bại chỉ vì chúng tôi đã cố xóa một tệp không tồn tại.
noclobber
trong bash) hoặc có thể chmod-ing tệp còn tồn tại để chuyển hướng thất bại nếu tệp tồn tại (không tránh điều kiện cuộc đua), nhưng tất cả những gì sẽ làm là làm cho các lỗi tinh tế hơn.
Một lệnh khác tôi đã sử dụng là:
[ -e file ] && rm file
Bạn có thể sử dụng điều này:
#!/bin/bash
file="file_you_want_to_delete"
if [ -f $file ] ; then
rm $file
fi
echo $?
không cung cấp 1 nếu tệp không tồn tại.
Nếu bạn muốn bỏ qua bước để kiểm tra xem tệp có tồn tại hay không, thì bạn có thể sử dụng một lệnh khá dễ dàng, nó sẽ xóa tệp nếu tồn tại và không gây ra lỗi nếu nó không tồn tại.
rm -f xyz.csv
-f
nó sẽ không gây ra lỗi. Câu trả lời này đã giúp tôi, cảm ơn bạn.
Một cái gì đó như thế này sẽ làm việc
#!/bin/sh
if [ -fe FILE ]
then
rm FILE
fi
-f kiểm tra nếu đó là một tập tin thông thường
-e kiểm tra nếu tập tin tồn tại
Giới thiệu nếu biết thêm thông tin
EDIT: -e được sử dụng với -f là dự phòng, vì chỉ sử dụng -f nên cũng hoạt động
-a
được phản đối, sử dụng -e
thay thế.
-f
.
-e
trong -fe
là dư thừa, -f
cũng như kiểm tra sự tồn tại của tệp theo như tôi biết ..
if [ $( ls <file> ) ]; then rm <file>; fi
Ngoài ra, nếu bạn chuyển hướng đầu ra của mình bằng >
thay vì >>
nó sẽ ghi đè lên tệp trước đó
file
nó giống như5 -lt 2
rm $my_file
, phải không? Bạn đang sử dụng vỏ gì?