โฟลเดอร์และชื่อไฟล์เดียวกันในตำแหน่งที่ตั้งเดียวกัน


15

ในอูบุนตูเหตุใดฉันจึงไม่มีโฟลเดอร์ชื่อ "MyFile" และเอกสารชื่อ "MyFile" ในตำแหน่งเดียวกัน ฉันได้รับitem already used in this locationข้อผิดพลาด Ubuntu / Linux จัดการโฟลเดอร์และไฟล์เป็นวัตถุเดียวกัน (ตัวชี้ไปยังดิสก์) หรือไม่?


มันมีชื่อตรงกับที่? ไฟล์มีจุดนำในชื่อไฟล์หรือไม่ ยกตัวอย่างเช่น.myfile?
Sergiy Kolodyazhnyy

ผมมีปัญหาเดียวกัน. ฉันเปลี่ยนชื่อใหม่ มีหลายตัวเลือก: เปลี่ยนชื่อโฟลเดอร์เป็นตัวพิมพ์เล็กหรือเพิ่มส่วนขยายตัวอย่างเช่น - myfile หรือ My.File หรือเปลี่ยนชื่อไฟล์เป็น MyFile.txt การเปลี่ยนชื่อจะทำได้เช่นกัน
บั๊ก


ฉันแบ่งปันความคับข้องใจของคุณ ฉันกำลังสร้างเว็บไซต์แบบสแตติกและฉันไม่สามารถมีรุ่นท้องถิ่นที่มีโฟลเดอร์ที่เรียกว่าblogมีการโพสต์ในบล็อกและหน้า html ที่ถูกเรียกblogพร้อมกับรายการโพสต์บล็อก
Costa

คำตอบ:


29

ใน Linux เกือบทุกอย่างเป็นตัวอธิบายไฟล์ ไดเร็กทอรีเป็นไฟล์ชนิดพิเศษที่จากมุมมองของผู้ใช้สามารถเก็บไฟล์อื่นได้

ดังนั้นคุณไม่สามารถมีทั้งชื่อที่เหมือนกันในไดเรกทอรีเดียวกันในเวลาเดียวกัน

หากคุณสามารถทำได้ชีวิตจะกลายเป็นความสุขสำหรับ coders สิ่งที่คุณจะมีคำสั่ง "isDir" กลับมาเมื่อมีคนต้องการสร้างไดเรกทอรีและตรวจสอบว่ามีอยู่ IsDir ("/ home / shrodingers / cat") ควรคืนค่าจริงเท็จหรือทั้งสองอย่างหรือไม่ และสิ่งที่คุณคาดหวังถ้ามีคนต้องการเปิดไฟล์ในรหัสบางอย่าง?

และระบบควรทำอย่างไรเมื่อคุณบอกให้เปิดบางอย่าง สมมติว่าคุณต้องการไฟล์หรือไม่ นั่นเป็นปัญหาคาถา;)

โดยวิธีการ: สิ่งนี้เป็นจริงสำหรับทุกระบบปฏิบัติการไม่ใช่เฉพาะ Linux แม้ว่าจากมุมมองของเดสก์ท็อประบบปฏิบัติการสามารถเพิ่มตัวระบุเฉพาะให้กับไฟล์หรือไดเรกทอรีและลบออกจากรายชื่อได้ จากมุมมองบรรทัดคำสั่งมันจะมีปัญหาแม้ว่า

มีสิ่งหนึ่งที่เรามีเหนือ Windows: เราใช้ชื่อที่คำนึงถึงขนาดตัวพิมพ์ ดังนั้น "MYFILE" และ "myfile" จึงแตกต่างกัน


2
ไม่มีปัญหา :) ฉันทำเพื่อ upvotes ;-)
Rinzwind

1
@Rinzwind สำหรับผู้โหวต? ตกลงนี่เป็นอีกอัน
AB

1
ทฤษฎี Linux ของทุกสิ่ง: ทุกอย่างเป็นไฟล์!
ผู้บัญชาการไบต์

โธและฉันร่วมมือกับแมวของSchrödinger / ตลกทั้งสี่เดือนที่ผ่านมา และอย่างที่ผู้บัญชาการ Byte กล่าวว่าการแสดงออกคือ "ทุกอย่างเป็นไฟล์" ไม่ใช่ "ทุกอย่างเป็นตัวบ่งชี้ไฟล์"
G-Man กล่าวว่า 'Reinstate Monica'

1
Plan9 ( plan9.bell-labs.com/plan9 ) (ผู้สร้างดั้งเดิมของ Unix) น่าจะเป็นระบบปฏิบัติการเดียวที่ "ทุกอย่างเป็นไฟล์" สำหรับระบบ Unix และ Linux อื่น ๆวลีที่ถูกต้องคือ "ทุกอย่างคือ file descriptor" "ทุกอย่างเป็นไฟล์" ยกเว้นหน่วยความจำการเรียกของระบบอุปกรณ์เครือข่ายและทุกอย่างยกเว้นไฟล์ แต่พวกเขาทุกคนมี file-descriptor ;-) ในกรณีที่มีคนต้องการที่จะไปกับ -> แชท: =)
Rinzwind

1

คุณไม่สามารถมีสองเอนทิตีที่มีชื่อเดียวกันในตำแหน่งที่ตั้งเดียวกัน จะเกิดอะไรขึ้นเมื่อคุณต้องการ cat หรือ vi ไฟล์ แม่มดจะเลือกเอนทิตีหรือไม่? ดังนั้นเนื่องจากความเป็นไปได้ที่สับสนคุณจะไม่สามารถมีชื่อเดียวกันสำหรับไฟล์และโฟลเดอร์ในตำแหน่งเดียวกัน และโดยวิธีการที่โฟลเดอร์เป็นไฟล์ที่โฮสต์ไฟล์อื่น ๆ


3
คำตอบของคุณส่งคำถามของ OP กลับไปที่ใบหน้าของเขา ("คุณไม่สามารถมีสองเอนทิตีที่มีชื่อเดียวกันในตำแหน่งเดียวกัน" ซึ่งเขา / เธอรู้ชัดเจนแล้ว - คำถามคือ "ทำไม") แล้วคุณถามคำถามเชิงโวหาร ราวกับว่าพวกเขาไม่สามารถตอบได้และนั่นแก้ไขคำถามได้ หากฉันมีไฟล์และไดเรกทอรีที่มีชื่อเดียวกันและฉันcatหรือviชื่อนั้นแน่นอนว่าระบบปฏิบัติการควรเลือกไฟล์ ทำไมถึงใช้งานไม่ได้
G-Man กล่าวว่า 'Reinstate Monica'

2
@ G-Man: อันviที่จริงแล้วvimบน Ubuntu มักจะมีความสุขที่สมบูรณ์แบบในการเปิดและแสดงไดเรกทอรีและแก้ไขได้ ลองมัน: vi .
arielf

1
@arielf: (1) ฉันกำลังบอกว่าถ้าเป็นไปได้สำหรับไฟล์และไดเรกทอรีย่อยที่มีชื่อเดียวกันที่จะมีอยู่ในไดเรกทอรีเดียวกันจากนั้นเมื่อคำสั่งที่มุ่งเน้นไฟล์เช่น ( catหรือviเป็นหลัก) หรือการตีความเชิงตรรกะคือการเรียกใช้มันบนไฟล์มากกว่าในไดเรกทอรีย่อย ความจริงที่ว่าคำสั่งที่viเกี่ยวกับไฟล์ (ส่วนใหญ่) ยังทำงานในไดเรกทอรี (ย่อย) ด้วยนั้นไม่เกี่ยวข้องกับคำสั่งนั้น
G-Man กล่าวว่า 'Reinstate Monica'

1
(2) ข้อความของคุณคือปลาเฮอริ่งแดง vimไม่รักษาข้อโต้แย้งไดเรกทอรีย่อย na argumentsvely; ด้วยรหัสเดียวกันกับที่มันจัดการไฟล์  vimดูเหมือนว่าจะ (ในระดับง่ายมาก) สองโปรแกรมในหนึ่งเดียว: หากมีการเรียกใช้ไฟล์มันจะทำหน้าที่เหมือนโปรแกรมแก้ไขข้อความและหากถูกเรียกใช้ในไดเรกทอรีย่อยมันจะทำหน้าที่เหมือนตัวจัดการไฟล์
G-Man กล่าวว่า 'Reinstate Monica'

1
@ G-Man: ฉันแค่อ้างถึงการยืนยันครั้งสุดท้ายของคุณในความคิดเห็นที่ 1: "จากนั้นเห็นได้ชัดว่าระบบปฏิบัติการควรเลือกไฟล์" - viนั่นคือสิ่งที่เพิ่มขึ้นมาที่ผมว่าไม่จริงสำหรับ ไชโย
arielf

1

ฉันรู้ว่านี่เป็นหัวข้อเก่า แต่ฉันเพิ่งมีปัญหาเดียวกันและฉันต้องการแบ่งปัน
นี่คือเรื่องราวของฉัน (อดทนรอมันจบลงอย่างมีความสุข)

สภาพแวดล้อม:
Gentoo เคอร์เนล 4.12.5 64 บิตในการใช้ซ้ำ

สิ่งนี้จะเกิดขึ้นได้อย่างไร
ฉันมีเครื่องหลายเครื่องที่มีโฟลเดอร์แชร์โดยใช้ syncthing ในบางจุดที่ผ่านมาฉันได้ลบไฟล์ชื่อ ".stfolder" และสร้างไดเรกทอรีด้วยชื่อนั้นแทน ดังนั้นข้อผิดพลาดอาจเกิดจากการประสานการประสานการดำเนินการนี้กับเครื่องอื่น

ตอนนี้เรามาตรวจสอบข้อผิดพลาด: (ฉันทำงานเป็นrootที่นี่)

ls -lahd .*
drwxrwx--- 5 stopi syncthing 656  3 sept. 18:24 .
drwxr-xr-x 5 stopi stopi     240  3 sept. 18:21 ..
drw-rw---- 2 stopi syncthing  48  3 sept. 18:24 .stfolder
-rw-rw---- 1 stopi syncthing   0 29 août  12:51 .stfolder
-rw-rw---- 1 stopi syncthing  23 28 oct.   2017 .stignore

find -type f -name .stfolder
                              (<= no output there)

find -type f -name ".*"
./.stignore
./.stfolder

find -type f -name ".s*"
./.stignore

ดูเหมือนว่าไฟล์เป็นผี แต่โฟลเดอร์จะตอบรับตามปกติ (พร้อมค้นหา)

file .*
.:             directory
..:            directory
.stfolder:     directory
.stfolder:     empty
.stignore:     C source, ASCII text

file .s*
.stfolder:     directory
.stignore:     C source, ASCII text

ฉันรู้ว่าแปลกมาก ...

rm -r .stfolder

ls -lahd .*
drwxrwx--- 5 stopi syncthing 656  3 sept. 18:24 .
drwxr-xr-x 5 stopi stopi     240  3 sept. 18:21 ..
-rw-rw---- 1 stopi syncthing   0 29 août  12:51 .stfolder
-rw-rw---- 1 stopi syncthing  23 28 oct.   2017 .stignore

rm .stfolder
rm: impossible de supprimer '.stfolder': Aucun fichier ou dossier de ce type

ฉันไม่สามารถลบไฟล์ผีได้!

แต่ในที่สุดฉันก็ประสบความสำเร็จในการลบมันโดยการเคลื่อนย้ายมันไปยังจุดต่อ tmpfs

mv .stfolder /elsewhere/
mv: impossible d'évaluer '.stfolder': Aucun fichier ou dossier de ce type
mv .* /elsewhere/

ฉันต้องบอกว่าข้อผิดพลาดยังคงอยู่ใน tmpfs ดังนั้นจึงไม่เกี่ยวข้องกับ reiserfs:

cd /elsewhere

ls -lahd .*
-rw-rw----  1 stopi syncthing   0 29 août  12:51 .stfolder

ls -lahd .s*
ls: impossible d'accéder à '.s*': Aucun fichier ou dossier de ce type

ดังที่คุณเห็นในเอาต์พุต bash นี้ไฟล์มีอยู่และไม่ปรากฏในเวลาเดียวกัน เนื่องจากความสามารถของแมวSchrödingerนี้เราจึงสามารถสร้างโฟลเดอร์ที่มีชื่อเดียวกัน
แต่เดี๋ยวก่อนมีอีกมาก (และคุณควรจะเห็นได้ชัด): เราสามารถสร้างไฟล์ใหม่ด้วยชื่อเดียวกันได้

touch .stfolder

ls -lahdQ
total 0
drwxrwxr-x  3 root   users  100  3 sept. 19:13 "."
drwxrwxrwt 18 root   root   440  3 sept. 17:35 ".."
-rw-r--r--  1 root   root     0  3 sept. 19:13 ".stfolder"
-rw-r-----  1 root   root     0  3 sept. 19:09 ".stfolder"

สามารถคัดลอกผี (ดังนั้นฉันสามารถทำซ้ำข้อบกพร่อง) หรือจัดการโดย chown, chmod ฯลฯ ข้อ จำกัด เพียงอย่างเดียวคือคุณไม่สามารถตั้งชื่อได้ดังนั้นคุณต้องใส่มันไว้ในไดเรกทอรีว่างและใช้ ". *" เป็น ข้อโต้แย้งสำหรับคำสั่งเหล่านั้น ... แต่มันใช้งานได้!

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

vi .*
" ============================================================================
" Netrw Directory Listing                                        (netrw v162)
"   /elsewhere
"   Sorted by      name
"   Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:special
" ==============================================================================
../
./
.<200b>stfolder

ใช่มีตัวอักษรที่มองไม่เห็นในไฟล์นั้นอยู่หลังจุด
สิ่งนี้จะอธิบายทุกอย่าง
ขอบคุณพระเจ้าฉันไม่ได้ใช้ "echo test >>. *" และแมว ...


U+200bเป็น"ช่องว่างความกว้างศูนย์"โดยวิธีการ ฉันชอบเกร็ดเล็กเกร็ดน้อยนี้แม้ว่าฉันกลัวว่ามันอาจจะไม่นับรวมเป็นคำตอบ
PerlDuck

0

/unix//a/238056/139805

ว้าวนี่มันแปลกจริง ๆ แต่ฉันเพิ่งทำในสิ่งที่ผู้เขียนถาม นี่คือวิธีการดังนั้นจึงเป็นคำตอบที่แท้จริง: P

charles@charles-MacBook ~ $ cd /usr/share
charles@charles-MacBook /usr/share $ ls -ld pix*
drwxr-xr-x 13 root root  4096 Oct 22 21:04 pixmaps
-rw-r--r--  1 root root 17626 Oct 22 21:07 pixmaps 
charles@charles-MacBook /usr/share $ mv pixmaps pixmaps
mv: cannot move ‘pixmaps’ to a subdirectory of itself, ‘pixmaps/pixmaps’
charles@charles-MacBook /usr/share $ ls -ld pix*
drwxr-xr-x 13 root root  4096 Oct 22 21:04 pixmaps
-rw-r--r--  1 root root 17626 Oct 22 21:07 pixmaps 
charles@charles-MacBook /usr/share $ file pix*
pixmaps:  directory
pixmaps : X pixmap image, ASCII text

สิ่งนี้ทำโดย:

charles-MacBook MaSSH # ls
instMaSSH.sh  MaSSHandra  MaSSHandra.desktop  MaSSHandraMesh.xpm
MaSSHandra.xpm  mime-MaSSHandra.xml
charles-MacBook MaSSH # cat instMaSSH.sh 
cp -i MaSSHandra.desktop /usr/share/applications
cp -i MaSSHandra.xpm /usr/share/pixmaps 
cp -i MaSSHandraMesh.xpm /usr/share/pixmaps
xdg-icon-resource install --context mimetypes --size 48 /usr/share/pixmaps/MaSSHandra.xpm application-x-MaSSHandra
xdg-icon-resource install --context mimetypes --size 48 /usr/share/pixmaps/MaSSHandraMesh.xpm application-x-MaSSHandraMesh
setcap cap_net_raw+ep /opt/MaSSHandra/bin/MaSSHandra
charles-MacBook MaSSH # ./instMaSSH.sh 
cp: overwrite ‘/usr/share/applications/MaSSHandra.desktop’? y
xdg-icon-resource: file '/usr/share/pixmaps/MaSSHandra.xpm' does not exist
xdg-icon-resource: file '/usr/share/pixmaps/MaSSHandraMesh.xpm' does not exist

โอ้โหตอบสนองอีกสองไฟล์ที่มีชื่อเดียวกันไม่ใช่แม้แต่ไดเรกทอรีและไฟล์อีกต่อไปว่าเกิดอะไรขึ้น ??? _

charles-MacBook share # ls -ld pi*
drwxr-xr-x 13 root root  4096 Oct 22 21:08 pixmaps
-rw-r--r--  1 root root 17626 Oct 22 21:09 pixmaps 
charles-MacBook share # mv pixmaps /tmp
charles-MacBook share # mv pixmaps  /tmp/pixmaps/
charles-MacBook share # ls -ld pix*
-rw-r--r-- 1 root root 21535 Oct 22 21:26 pixmaps
-rw-r--r-- 1 root root 17626 Oct 22 21:26 pixmaps 
charles-MacBook share # ls -li pix*
1849351 -rw-r--r-- 1 root root 21535 Oct 22 21:26 pixmaps
1841386 -rw-r--r-- 1 root root 17626 Oct 22 21:26 pixmaps 
charles-MacBook share # file pix*
pixmaps:  X pixmap image, ASCII text
pixmaps : X pixmap image, ASCII text
charles-MacBook share # ls -liF pix*
1849351 -rw-r--r-- 1 root root 21535 Oct 22 21:26 pixmaps
1841386 -rw-r--r-- 1 root root 17626 Oct 22 21:26 pixmaps 

พฤติกรรมที่แปลกประหลาดอย่างสิ้นเชิง

charles-MacBook MaSSH # ls -l /usr/share/pixmaps
pixmaps   pixmaps   
charles-MacBook MaSSH # rm -i /usr/share/pixmaps                                                                 
rm: remove regular file ‘/usr/share/pixmaps’? y
charles-MacBook MaSSH # ls -l /usr/share/pixmaps  
-rw-r--r-- 1 root root 17626 Oct 22 21:26 /usr/share/pixmaps 
charles-MacBook MaSSH # rm -i /usr/share/pixmaps
rm: cannot remove ‘/usr/share/pixmaps’: No such file or directory
charles-MacBook MaSSH # ls -l /usr/share/pixmaps  
-rw-r--r-- 1 root root 17626 Oct 22 21:26 /usr/share/pixmaps 
charles-MacBook MaSSH # cd /usr/share
charles-MacBook share # rm pixmaps  
charles-MacBook share # 

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