ฉันต้องการ Bash one-liner ที่สร้างไฟล์แบบ atom ถ้าไม่มีอยู่ นั่นหมายความว่า "ถ้าไฟล์ไม่มีอยู่ให้สร้างมัน" แต่ต้องแน่ใจว่าไม่มีใครจัดการเพื่อสร้างไฟล์ในพื้นที่เล็ก ๆ ระหว่างการทำ if และการสร้างไฟล์
ฉันต้องการ Bash one-liner ที่สร้างไฟล์แบบ atom ถ้าไม่มีอยู่ นั่นหมายความว่า "ถ้าไฟล์ไม่มีอยู่ให้สร้างมัน" แต่ต้องแน่ใจว่าไม่มีใครจัดการเพื่อสร้างไฟล์ในพื้นที่เล็ก ๆ ระหว่างการทำ if และการสร้างไฟล์
คำตอบ:
ขโมยคำตอบจากความคิดเห็นและลิงก์ไปยัง [SO] ดูเหมือนว่ามีวิธีการPOSIXที่ไม่เกี่ยวข้องmkdir
ตามที่ฉันกล่าวไว้ในคำตอบดั้งเดิมของฉันด้านล่าง
set -o noclobber # or set -C
{ > file ; } &> /dev/null
การเปลี่ยนเส้นทางไปที่ไฟล์นี้ส่งคืน 0 หรือล้มเหลวและส่งกลับไม่ใช่ศูนย์หากไฟล์นั้นมีอยู่แล้ว
คำตอบเดิม
คุณจะต้องใช้mkdir
- นั่นคืออะตอมมิเช่นนั้นไดเรกทอรีจะถูกสร้างขึ้นและคุณสามารถดำเนินการต่อหรือไม่สร้างขึ้นเพื่อให้คุณดำเนินการที่เหมาะสม
แน่นอนว่าmkdir
จะไม่สร้างไฟล์ แต่เมื่อคุณรู้ว่าคุณมีสิทธิ์ในการเข้าถึงไดเรกทอรีอย่างพิเศษคุณสามารถสร้างไฟล์ที่คุณต้องการได้
สำหรับสายการบินหนึ่ง - ฉันจะปล่อยให้คุณ โดยส่วนตัวฉันจะเขียนมันเกินสองสามบรรทัดเพราะมันจะบำรุงรักษาได้ดีกว่า
มันเป็นไฟล์หรือไดเรกทอรี? หากไฟล์คุณสามารถใช้คำสั่งแบบสัมผัสอย่างง่าย - ถ้ามีไฟล์อยู่มันแค่แก้ไขเวลาเข้าถึงล่าสุด หากไม่มีไฟล์จะถูกสร้างขึ้น
ลองอันนี้. ln
มีฟังก์ชันการทดสอบและการตั้งค่า
touch lock.$$.tmp
if ln lock.$$.tmp lock.dat 2>/dev/null
then
echo "File is mine"
else
echo "Test and set failed"
fi
rm -f lock.$$.tmp
หากคุณไม่สนใจชื่อไฟล์คุณสามารถมอบหมายงานนี้ให้กับยูทิลิตี้เช่น mktemp
Create a temporary file or directory, safely, and print its name.
TEMPLATE must contain at least 3 consecutive `X's in last component.
If TEMPLATE is not spec‐ified, use tmp.XXXXXXXXXX, and --tmpdir is
implied. Files are created u+rw, and directories u+rwx, minus umask
restrictions.
ภาวนา:
filename=$(mktemp)