ฉันมีเส้นทางที่สัมพันธ์กัน
$base_path = "input/myMock.TGZ";
myMock.TGZ
คือชื่อไฟล์ที่อยู่ในโฟลเดอร์อินพุต ชื่อไฟล์สามารถเปลี่ยนแปลงได้ $base_path
แต่เส้นทางที่จะถูกเก็บไว้เสมอใน
ฉันต้องการตรวจสอบว่ามีไฟล์อยู่ในไฟล์$base_path
.
ฉันมีเส้นทางที่สัมพันธ์กัน
$base_path = "input/myMock.TGZ";
myMock.TGZ
คือชื่อไฟล์ที่อยู่ในโฟลเดอร์อินพุต ชื่อไฟล์สามารถเปลี่ยนแปลงได้ $base_path
แต่เส้นทางที่จะถูกเก็บไว้เสมอใน
ฉันต้องการตรวจสอบว่ามีไฟล์อยู่ในไฟล์$base_path
.
คำตอบ:
ทดสอบว่ามีบางสิ่งอยู่ในเส้นทางที่กำหนดหรือไม่โดยใช้ตัว-e
ดำเนินการทดสอบไฟล์
print "$base_path exists!\n" if -e $base_path;
อย่างไรก็ตามการทดสอบนี้อาจกว้างกว่าที่คุณตั้งใจไว้ โค้ดด้านบนจะสร้างเอาต์พุตหากมีไฟล์ธรรมดาอยู่ที่พา ธ นั้น แต่จะเริ่มทำงานสำหรับไดเร็กทอรีไพพ์ที่ตั้งชื่อ symlink หรือความเป็นไปได้ที่แปลกใหม่กว่า ดูรายละเอียดในเอกสารประกอบ
จากส่วนขยายของ.TGZ
คำถามของคุณดูเหมือนว่าคุณจะคาดหวังไฟล์ธรรมดามากกว่าทางเลือกอื่น ตัว-f
ดำเนินการทดสอบไฟล์ถามว่าพา ธ นำไปสู่ไฟล์ธรรมดาหรือไม่
print "$base_path is a plain file!\n" if -f $base_path;
เอกสาร perlfunc ครอบคลุมรายการตัวดำเนินการทดสอบไฟล์ของ Perl แบบยาวซึ่งครอบคลุมสถานการณ์ต่างๆที่คุณจะพบในทางปฏิบัติ
-r
ไฟล์สามารถอ่านได้โดย uid / gid ที่มีประสิทธิภาพ-w
ไฟล์สามารถเขียนได้โดย uid / gid ที่มีประสิทธิภาพ-x
ไฟล์สามารถเรียกใช้งานได้โดย uid / gid ที่มีประสิทธิภาพ-o
ไฟล์เป็นของ uid ที่มีประสิทธิภาพ-R
ไฟล์สามารถอ่านได้โดย uid / gid จริง-W
ไฟล์สามารถเขียนได้โดย uid / gid จริง-X
ไฟล์สามารถเรียกใช้งานได้โดย uid / gid จริง-O
ไฟล์เป็นของ uid จริง-e
แฟ้มที่มีอยู่.-z
ไฟล์มีขนาดเป็นศูนย์ (ว่างเปล่า)-s
ไฟล์มีขนาดที่ไม่ใช่ศูนย์ (ส่งคืนขนาดเป็นไบต์)-f
ไฟล์เป็นไฟล์ธรรมดา-d
ไฟล์คือไดเร็กทอรี-l
ไฟล์เป็นลิงก์สัญลักษณ์ (เป็นเท็จหากระบบไฟล์ไม่รองรับ symlinks)-p
File คือไพพ์ที่มีชื่อ (FIFO) หรือ Filehandle คือไพพ์-S
ไฟล์เป็นซ็อกเก็ต-b
ไฟล์เป็นไฟล์พิเศษบล็อก-c
ไฟล์เป็นไฟล์พิเศษของอักขระ-t
Filehandle เปิดเป็น tty-u
ไฟล์มีการตั้งค่าบิต setuid-g
ไฟล์มีการตั้งค่าบิต setgid-k
ไฟล์มีการตั้งค่าบิตเหนียว-T
ไฟล์เป็นไฟล์ข้อความ ASCII หรือ UTF-8 (การเดาเชิงฮิวริสติก)-B
ไฟล์เป็นไฟล์ "ไบนารี" (ตรงข้ามกับ-T
)-M
เวลาเริ่มต้นของสคริปต์ลบเวลาแก้ไขไฟล์เป็นวัน-A
เวลาเข้าใช้งานเหมือนกัน-C
เวลาเปลี่ยนไอโหนดเท่ากัน (Unix อาจแตกต่างกันสำหรับแพลตฟอร์มอื่น)
-e
ใช้ได้กับเส้นทางสัมพัทธ์ แต่ฉันคิดว่าฉันอาจเข้าใจคำถามของคุณผิด คุณมีชื่อไดเร็กทอรีmyMock.TGZ
และคุณต้องการทราบว่าไดเร็กทอรีนั้นมีไฟล์ที่มีชื่อเฉพาะหรือไม่? ช่วยเราให้คำตอบที่ดีขึ้นโดยแก้ไขคำถามของคุณเพื่อรวมตัวอย่าง!
คุณอาจต้องการตัวแปรที่มีอยู่ ... 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
เป็นตัวดำเนินการ 'มีอยู่' ใน Perl
คุณสามารถตรวจสอบสิทธิ์และแอตทริบิวต์อื่น ๆ โดยใช้รหัสในหน้านี้
คุณสามารถใช้ได้: if(-e $base_path)
-f
เพื่อทดสอบไฟล์ปกติ (ซึ่งต่างจากไดเร็กทอรีหรือไฟล์ประเภทพิเศษอื่น ๆ )
ใช้:
if (-f $filePath)
{
# code
}
-e
คืนค่าจริงแม้ว่าไฟล์จะเป็นไดเร็กทอรี -f
จะคืนค่าจริงถ้าเป็นไฟล์จริงเท่านั้น
#!/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";}
จะทำเคล็ดลับ
ใช้รหัสด้านล่าง ตรวจสอบที่นี่ว่าเป็นไฟล์หรือไม่:
print "File $base_path is exists!\n" if -f $base_path;
และสนุกสนาน