คำถามติดแท็ก filenames

ชื่อไฟล์เป็นชื่อที่ใช้เพื่อระบุไฟล์ที่ไม่ซ้ำกันในระบบไฟล์ที่กำหนด

8
นับจำนวนไฟล์ในไดเรกทอรีตามนามสกุล
เพื่อวัตถุประสงค์ในการทดสอบฉันต้องการนับจำนวนไฟล์ภาพที่อยู่ในไดเรกทอรีโดยแยกไฟล์ภาพแต่ละประเภทตามนามสกุลไฟล์ (jpg = "ใช่" เพราะในภายหลังจะมีประโยชน์สำหรับสคริปต์อื่นที่จะเรียกใช้การกระทำ ในแต่ละไฟล์นามสกุล) ฉันสามารถใช้สิ่งต่อไปนี้สำหรับไฟล์ JPEG เท่านั้น jpg="" count=`ls -1 *.jpg 2>/dev/null | wc -l` if [ $count != 0 ] then echo jpg files found: $count ; jpg="yes" fi พิจารณานามสกุลไฟล์ jpg, png, bmp, raw และอื่น ๆ ฉันควรใช้whileวงจรเพื่อทำสิ่งนี้หรือไม่?

3
ทำไมชื่อไฟล์ที่ขึ้นต้นด้วยจุดถูกซ่อนอยู่? ฉันสามารถซ่อนไฟล์โดยไม่ใช้จุดเป็นตัวอักษรตัวแรกได้หรือไม่?
ตอนแรกฉันคิดว่ามันเป็นเรื่องบังเอิญ แต่ตอนนี้ฉันเห็นว่ามีแท็กอยู่ด้วย: ชื่อไฟล์ที่ซ่อนทั้งหมดเริ่มต้นด้วยจุด นี่คือการประชุมหรือไม่? ทำไมถึงเลือก มันสามารถเปลี่ยนแปลงได้หรือไม่ หรือกล่าวอีกนัยหนึ่ง (ตามคำถามที่เกี่ยวข้อง @evilsoup แนะนำว่าหมายถึงคำตอบของกลุ่มอื่น ๆ ): ฉันสามารถซ่อนไฟล์โดยไม่เปลี่ยนชื่อไฟล์ (ใช้.เป็นอักขระตัวแรกของชื่อ) ได้หรือไม่

1
dot dot (.. ) คืออะไร? ทำไมพฤติกรรมของมันจึงแตกต่างจาก symlink?
ฉันพยายามที่จะเข้าใจธรรมชาติของ..(สองจุด) ดูเหมือนว่าจะชี้ไปยังเป้าหมายที่แตกต่างกันขึ้นอยู่กับว่าคุณเข้าถึงมันอย่างไร ตัวอย่าง:- /outer/ middle/ inner/ inner --> ./middle/inner/ ตอนนี้/outer/middle/inner/..นำไปสู่การ/outer/middle/แต่ถ้าฉันเข้าถึงได้ผ่านการเชื่อมโยงสัญลักษณ์นำไปสู่/outer/inner/.. /outer/ดูเหมือนว่ามีสองที่แตกต่างกัน..ที่นี่ อะไร..กันแน่ ลิงก์สัญลักษณ์? ลิงค์ยาก? หรือมันสร้างแบบไดนามิกขึ้นอยู่กับเส้นทางเมื่อเข้าถึงไดเรกทอรีหรือไม่ หรือบางทีความเข้าใจของฉันเกี่ยวกับลิงก์สัญลักษณ์นั้นไม่ถูกต้อง แก้ไข: การสังเกตอื่น ๆ ที่เกี่ยวข้อง /outer/ middle/ file inner/ f --> ./../file inner --> ./middle/inner/ ตอนนี้ถ้าฉันพยายามเข้าถึงไฟล์ผ่าน/outer/inner/fมันใช้งานได้ แต่มันไม่ควรเนื่องจาก/outer/inner/../fileไม่ได้ชี้ไปที่ไฟล์ /outer/middle/inner/..ไฟล์ที่อยู่ใน สิ่งนี้ดูเหมือนจะขัดแย้งกับพฤติกรรมข้างต้น!

2
GLOBIGNORE ทำงานอย่างไร
ตามหน้าคู่มือของ bash: GLOBIGNORE A colon-separated list of patterns defining the set of filenames to be ignored by pathname expansion. If a filename matched by a pathname expansion pattern also matches one of the patterns in GLOBIGNORE, it is removed from the list of matches. อย่างไรก็ตามในทางปฏิบัติ ... $ bash --noprofile --norc …

2
ชื่อไฟล์ UTF 8 หรือไม่
ในระบบปฏิบัติการยูนิกซ์ที่อนุญาตให้ใช้ชื่อไฟล์ utf6 ได้หรือไม่ ถ้าเป็นเช่นนั้นฉันต้องทำอะไรเป็นพิเศษเพื่อเขียนไฟล์ลงดิสก์ ให้ฉันอธิบายสิ่งที่ฉันหวังว่าจะทำ ฉันกำลังเขียนแอปพลิเคชันที่จะถ่ายโอนไฟล์ผ่าน ftp ไปยังระบบระยะไกล แต่ชื่อไฟล์นั้นถูกตั้งค่าแบบไดนามิกเป็นผ่านชุดข้อมูล meta บางชุดซึ่งอาจเป็น utf8 ฉันสงสัยว่ามีสิ่งที่ฉันต้องทำเพื่อเขียนไฟล์ลงดิสก์ในยูนิกซ์ / ลินุกซ์หรือไม่ ทุกคนรู้ว่าจะเกิดอะไรขึ้นถ้าฉันอัพโหลดชื่อไฟล์ utf 8 ไปยังระบบไม่รองรับ utf8?

3
วิธีการยกเว้นบางไฟล์จากกลไกการขยายชื่อไฟล์ในทุบตี?
ฉันมีไดเรกทอรีระบบไฟล์ Ubuntu ในไดเรกทอรีรากและฉันตั้งใจคัดลอกหลายร้อยไฟล์ลงในไดเรกทอรีราก ฉันพยายามลบไฟล์ที่คัดลอกโดยไม่รวมระบบไฟล์เช่น rm -rf !{bin,sbin,usr,opt,lib,var,etc,srv,libx32,lib64,run,boot,proc,sys,dev} ./. บุมันไม่ทำงาน วิธีที่เหมาะสมในการยกเว้นไดเรกทอรีบางรายการในขณะที่ลบทั้งรายการคืออะไร แก้ไข: อย่าลองคำสั่งใด ๆ ที่นี่โดยไม่รู้ว่าจะทำอย่างไร!

2
วิธีที่สอดคล้องกับ POSIX ในการทำงานกับรายการชื่อไฟล์ที่อาจมีช่องว่าง
ฉันได้เห็นคำแนะนำในการเขียนสคริปต์ของ Bash แนะนำให้ใช้อาร์เรย์สำหรับทำงานกับชื่อไฟล์ที่มีช่องว่าง แต่DashAsBinShชี้ให้เห็นว่าอาร์เรย์ไม่สามารถเคลื่อนย้ายได้ดังนั้นฉันกำลังมองหาวิธีการทำงานร่วมกับ POSIX ในการทำงานกับรายการชื่อไฟล์ที่อาจมีช่องว่าง ฉันต้องการแก้ไขสคริปต์ตัวอย่างด้านล่างเพื่อที่จะได้ echo foo/target/a.jar foo/target/b.jar bar/target/lol whitespace.jar นี่คือสคริปต์ #!/usr/bin/env sh INPUT="foo/target/a.jar foo/target/b.jar bar/target/b.jar bar/target/lol whitespace.jar" # this would be produced by a 'ls' command # We can execute the ls within the script, if it helps dostuffwith() { echo $1; }; F_LOCATIONS=$INPUT ALL_FILES=$(for f in …

3
การเรียกใช้สคริปต์ไพ ธ อนจากเทอร์มินัลโดยไม่มีนามสกุล. py
ฉันต้องการที่จะเรียกสคริปต์หลามscript.pyจากท่าเรือโดยเพียงแค่พิมพ์สคริปต์ เป็นไปได้ไหม ถ้าเป็นเช่นนั้นได้อย่างไร ฉันรู้ว่าฉันสามารถหลีกเลี่ยงการพิมพ์python script.py ได้โดยเพิ่ม#! / usr / bin / env pythonไว้ด้านบนสุดของสคริปต์ แต่ฉันยังต้องเพิ่มคำต่อท้าย. pyเพื่อเรียกใช้สคริปต์

3
เป็นไปได้หรือไม่ที่จะวางซ้อน 'find -exec' ภายใน 'find -exec' อื่น?
สิ่งต่อไปนี้คือสิ่งที่ฉันเป็น แต่รหัสของฉันไม่ทำงานไม่ว่าฉันจะหลบหนี{}และ+ ; find ./ -maxdepth 1 -type d -name '.*' -exec \ find {} -maxdepth 1 -type f -name '*.ini' -exec \ md5sum \{\} \\; \; หลังจากเห็นคำถาม Unix - & - Linuxนี้ฉันพบว่าโค้ดต่อไปนี้ใช้งานได้ แต่ไม่พบการซ้อนกันและฉันสงสัยว่ามีวิธีที่ดีกว่าในการทำงานนี้โดยเฉพาะ find ./ -maxdepth 1 -type d -name '.*' \ -exec bash -c 'for x; do find …


2
เครื่องหมายทับ (/) หลังชื่อไดเร็กทอรีบนคำสั่งเชลล์
ฉันมีคำถามเล็กน้อยที่นี่ ถ้าผมมีสองไฟล์พูดfileaและfileb, mv filea filebจะ ลบ fileb เปลี่ยนชื่อfileaเป็นfileb แล้วถ้าฉันมีสองไดเรกทอรีพูดdiraและdirb, mv dira dirbจะ ย้ายdiraเข้าไปdirb(มันจะกลายเป็นdirb/dira) สังเกตว่าในทั้งสองกรณีไม่มีการบอกกล่าวหรือข้อความแล้วนี่มันค่อนข้างจะขัดแย้งกับฉัน ฉันคิดว่าmv dira dirbควรเขียนทับdirbเนื้อหาของdira(หรือรวมสองไดเรกทอรีภายใต้ชื่อไดเรกทอรีdirb) ฉันจำได้ว่าอ่านบางที่ว่าชื่อไดเรกทอรีที่มีเครื่องหมายทับ (เหมือนdira/) ถือว่าเป็นไดเรกทอรีและชื่อที่ไม่มีเครื่องหมายทับ (เหมือนdira) จะถือว่าเป็นไฟล์ (ไปยังขอบเขตที่แน่นอน) ตอนนี้ฉันต้องการทำให้เชลล์ (zsh และอาจทุบตี) เคารพเครื่องหมายของไดเรกทอรีโดยใช้เครื่องหมายทับ มีตัวเลือกเทอร์มินัลที่ทำให้ฉันสามารถบังคับใช้ได้หรือไม่? เพื่อชี้แจงนี่คือพฤติกรรมที่ฉันต้องการ: mv dira dirbผลลัพธ์dirbจะถูกเขียนทับด้วยเนื้อหาของdira mv dira dirb/ผลลัพธ์ในdiraการถูกย้ายเข้าdirb(ในdirb/dira) มีใครคิดแบบเดียวกับฉัน หรือฉันแค่แปลก ๆ ?

2
รูปแบบชื่อไฟล์เชลล์ที่ขยายเป็น dot files แต่ไม่ใช่ `.. '
เมื่อเร็ว ๆ นี้ฉันมีอุบัติเหตุเล็ก ๆ น้อย ๆ ที่เกิดจากรูปแบบเปลือกหอยที่ขยายออกไปอย่างคาดไม่ถึง ฉันต้องการเปลี่ยนเจ้าของจุดไฟล์หลาย ๆ อันใน/rootไดเรกทอรีดังนั้นฉันก็ทำได้ chown -R root .* ตามธรรมชาติแล้วการ.*ขยายไปสู่..ภัยพิบัติ ฉันรู้ว่าในbashพฤติกรรมนี้สามารถเปลี่ยนแปลงได้โดยการปรับแต่งตัวเลือกเชลล์บางอย่าง แต่ด้วยการตั้งค่าเริ่มต้นจะมีรูปแบบใดที่จะขยายไปยังทุก ๆ จุดไฟล์ในไดเรกทอรี แต่ไม่ใช่.และ..?

1
ระบบไฟล์ที่ไม่คำนึงถึงขนาดตัวพิมพ์จะแสดงชื่อไฟล์ทั้งเล็กและใหญ่อย่างไร?
คำถามนี้เกิดขึ้นกับฉันเมื่อวันก่อนเมื่อฉันทำงานเกี่ยวกับโครงการพัฒนาที่ต้องอาศัยกรอบการทำงานที่มีความเห็นเกี่ยวกับชื่อไฟล์ กรอบงาน (ไม่เกี่ยวข้องที่นี่) ต้องการเห็นชื่อไฟล์ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก นี่ทำให้ฉันคิด ในระบบไฟล์แบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ให้พูด extFAT หรือ HFS + (โดยเฉพาะอย่างยิ่งที่ไม่ต้องใช้ตัวพิมพ์ใหญ่ - ตัวพิมพ์เล็ก - ตัวพิมพ์ใหญ่) วิธีที่ระบบไฟล์ให้การเข้าถึงไฟล์เดียวกันกับทั้งชื่อไฟล์รุ่นบนและล่าง ตัวอย่างเช่น: $ cd ~/Documents $ pwd /home/derp/Documents $ cd ../documents $ pwd /home/derp/documents $ cd ../docuMents $ pwd /home/derp/docuMents $ cd ../DOCUMENTS $ pwd /home/derp/DOCUMENTS $ cd ../documentS $ pwd /home/derp/documentS คำสั่งทั้งหมดเหล่านี้จะแก้ไขไปยังไดเรกทอรีเดียวกัน พฤติกรรมนี้โดยเฉพาะผลลัพธ์จากpwdฟังก์ชันbashในกรณีนี้เพียงแสดงให้ฉันเห็นว่าฉันต้องการเห็นอะไร ตัวอย่างอื่น: …

7
วิธีที่สั้นที่สุดในการแยก 3 ชื่อสุดท้ายของชื่อไฟล์ฐาน (ลบด้วยคำต่อท้าย)
ฉันพยายามตั้งค่าตัวแปรในสคริปต์ sh เป็น 3 ตัวอักษรสุดท้ายของชื่อฐานของไฟล์ (โดยชื่อฐานฉันหมายถึงไม่มีเส้นทางและไม่มีคำต่อท้าย) ฉันประสบความสำเร็จในการทำสิ่งนี้ แต่ด้วยความอยากรู้อยากเห็นอย่างหมดจดฉันสงสัยว่ามีคำสั่งสั้นเพียงคำเดียวที่ฉันสามารถใช้ได้ เดิมทีฉันมีซับในด้วยawkแต่มันค่อนข้างยาว ขณะนี้ฉันมีสคริปต์สองบรรทัดนี้ (สมมติว่ามีชื่อไฟล์ที่สมบูรณ์อยู่$1): filebase=`basename "$1"` lastpart=`echo -n ${filebase%.*} | tail -c3` ดังนั้นสำหรับตัวอย่างเช่น"/path/to/somefile.txt"จบลงด้วย"ile"$lastpartใน ฉันสามารถรวมbasenameและบิตเพื่อตัดส่วนต่อท้ายเป็นคำสั่งเดียวได้หรือไม่และมีวิธีส่งไปยังtail(หรืออย่างอื่นที่ฉันสามารถใช้ได้) โดยไม่ต้องใช้ไพพ์หรือไม่? ไม่รู้จักคำต่อท้ายดังนั้นฉันไม่สามารถยึดเป็นพารามิเตอร์basenameได้ เป้าหมายหลักนั้นไม่สั้นมากเท่าที่จะเป็นไปได้ บริบทที่แท้จริงของทั้งหมดนี้คือคำถามเกี่ยวกับ Superuserที่ฉันพยายามหาคำตอบที่เรียบง่ายพอสมควร

5
เขียนเอาต์พุตของ wget หรือ curl ไปยังชื่อไฟล์ที่กำหนดเองตาม url
http://www.abc.com/123/def/ghi/jkl.mnoเช่นฉันมีการเชื่อมโยง ฉันต้องการดาวน์โหลดโดยใช้wgetหรือcurlรับชื่อของไฟล์ที่ส่งออกdef_ghi_jkl.mnoซึ่งเป็นส่วนที่def_ghiนำมาจากลิงค์ ฉันจะใส่wgetคำสั่งนี้ในสคริปต์เพื่อดาวน์โหลดหลายไฟล์ดังนั้นจึงไม่สามารถให้ชื่อไฟล์ที่ส่งออกได้อย่างชัดเจน
12 filenames  wget  curl 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.