Câu trả lời:
Kiểm tra xem có thứ gì đó tồn tại ở đường dẫn nhất định hay không bằng cách sử dụng -e
toán tử kiểm tra tệp.
print "$base_path exists!\n" if -e $base_path;
Tuy nhiên, thử nghiệm này có thể rộng hơn bạn dự định. Đoạn mã trên sẽ tạo đầu ra nếu một tệp thuần túy tồn tại ở đường dẫn đó, nhưng nó cũng sẽ kích hoạt cho một thư mục, một đường ống được đặt tên, một liên kết tượng trưng hoặc một khả năng kỳ lạ hơn. Xem tài liệu để biết chi tiết.
Với phần mở rộng .TGZ
trong câu hỏi của bạn, có vẻ như bạn mong đợi một tệp đơn giản hơn là các lựa chọn thay thế. Các -f
nhà điều hành tập-test hỏi liệu một con đường dẫn đến một tập tin đơn giản.
print "$base_path is a plain file!\n" if -f $base_path;
Tài liệu perlfunc bao gồm danh sách dài các toán tử kiểm tra tệp của Perl bao gồm nhiều tình huống bạn sẽ gặp trong thực tế.
-r
Tệp có thể đọc được bằng uid / gid hiệu quả.-w
Tệp có thể ghi bằng uid / gid hiệu quả.-x
Tệp được thực thi bằng uid / gid hiệu quả.-o
Tệp thuộc sở hữu của uid hiệu quả.-R
Tệp có thể đọc được bằng uid / gid thực.-W
Tệp có thể ghi bằng uid / gid thực.-X
Tệp được thực thi bởi uid / gid thực.-O
Tệp thuộc sở hữu của uid thực.-e
File tồn tại.-z
Tệp có kích thước bằng không (trống).-s
Tệp có kích thước khác không (trả về kích thước tính bằng byte).-f
Tệp là một tệp đơn giản.-d
Tệp là một thư mục.-l
Tệp là một liên kết tượng trưng (sai nếu liên kết tượng trưng không được hệ thống tệp hỗ trợ).-p
Tệp là một đường ống được đặt tên (FIFO), hoặc Filehandle là một đường ống.-S
Tệp là một ổ cắm.-b
Tệp là một tệp đặc biệt của khối.-c
Tệp là một tệp ký tự đặc biệt.-t
Filehandle được mở thành một tty.-u
Tệp đã đặt bit setuid.-g
Tệp đã đặt bit setgid.-k
Tệp có tập hợp bit dính.-T
Tệp là tệp văn bản ASCII hoặc UTF-8 (phỏng đoán theo kinh nghiệm).-B
Tệp là tệp "nhị phân" (ngược lại với-T
).-M
Thời gian bắt đầu tập lệnh trừ thời gian sửa đổi tệp, tính bằng ngày.-A
Tương tự cho thời gian truy cập.-C
Tương tự đối với thời gian thay đổi inode (Unix, có thể khác đối với các nền tảng khác)
-e
hoạt động với các đường dẫn tương đối, nhưng tôi nghĩ rằng tôi có thể đã hiểu sai câu hỏi của bạn. Bạn có một thư mục được đặt tên myMock.TGZ
và bạn muốn biết liệu thư mục đó có chứa một tệp có tên cụ thể hay không? Giúp chúng tôi cung cấp cho bạn câu trả lời tốt hơn bằng cách chỉnh sửa câu hỏi của bạn để bao gồm các ví dụ!
Bạn có thể muốn một biến thể của tồn tại ... perldoc -f "-f"
-X FILEHANDLE
-X EXPR
-X DIRHANDLE
-X A file test, where X is one of the letters listed below. This unary operator takes one argument,
either a filename, a filehandle, or a dirhandle, and tests the associated file to see if something is
true about it. If the argument is omitted, tests $_, except for "-t", which tests STDIN. Unless
otherwise documented, it returns 1 for true and '' for false, or the undefined value if the file
doesn’t exist. Despite the funny names, precedence is the same as any other named unary operator.
The operator may be any of:
-r File is readable by effective uid/gid.
-w File is writable by effective uid/gid.
-x File is executable by effective uid/gid.
-o File is owned by effective uid.
-R File is readable by real uid/gid.
-W File is writable by real uid/gid.
-X File is executable by real uid/gid.
-O File is owned by real uid.
-e File exists.
-z File has zero size (is empty).
-s File has nonzero size (returns size in bytes).
-f File is a plain file.
-d File is a directory.
-l File is a symbolic link.
-p File is a named pipe (FIFO), or Filehandle is a pipe.
-S File is a socket.
-b File is a block special file.
-c File is a character special file.
-t Filehandle is opened to a tty.
-u File has setuid bit set.
-g File has setgid bit set.
-k File has sticky bit set.
-T File is an ASCII text file (heuristic guess).
-B File is a "binary" file (opposite of -T).
-M Script start time minus file modification time, in days.
if (-e $base_path)
{
# code
}
-e
là toán tử 'sự tồn tại' trong Perl.
Bạn có thể kiểm tra các quyền và các thuộc tính khác bằng cách sử dụng mã trên trang này .
Bạn có thể dùng: if(-e $base_path)
-f
để thử nghiệm cho một tập tin bình thường (như trái ngược với một thư mục hoặc nhiều loại đặc biệt khác của tập tin)
Sử dụng:
if (-f $filePath)
{
# code
}
-e
trả về true ngay cả khi tệp là một thư mục. -f
sẽ chỉ trả về true nếu đó là một tệp thực
#!/usr/bin/perl -w
$fileToLocate = '/whatever/path/for/file/you/are/searching/MyFile.txt';
if (-e $fileToLocate) {
print "File is present";
}
if(-e $base_path){print "Something";}
sẽ làm thủ thuật
Sử dụng mã dưới đây. Đây - nếu kiểm tra, đó là tệp hay không:
print "File $base_path is exists!\n" if -f $base_path;
và tận hưởng