फ़ाइल ट्री आरेख खींचने के लिए किस उपकरण का उपयोग किया जाता है [बंद]


90

एक फ़ाइल ट्री को देखते हुए - इसमें निर्देशिकाओं के साथ एक निर्देशिका आदि, आप एक ग्राफिक फ़ाइल के रूप में फ़ाइल-ट्री के आरेख बनाने के लिए एक स्क्रिप्ट कैसे लिखेंगे कि मैं एक वर्ड प्रोसेसर दस्तावेज़ में एम्बेड कर सकता हूं। मैं वेक्टर (एसवीजी, ईपीएस, ईएमएफ ...) फाइलें पसंद करता हूं। टूल को विंडोज पर चलना चाहिए, लेकिन अधिमानतः क्रॉस-प्लेटफॉर्म पर। उपकरण वाणिज्यिक हो सकता है लेकिन अधिमानतः मुक्त हो सकता है।

अद्यतन 2012-02-20। प्रश्न एक प्रलेखन उप परियोजना से संबंधित था। मुझे समझाना था कि फाइलें (विशेष रूप से संसाधनों और कॉन्फ़िगरेशन फ़ाइलों में) कहाँ रहती हैं। मैं डॉस ट्री कमांड का उपयोग करके समाप्त हुआ। मैंने दोनों स्क्रीन के परिणाम (छोटे फ़ोल्डरों के लिए) और अधिक फ़ोल्डरों के लिए मुझे एक टेक्स्ट फाइल पर रीडायरेक्ट किया, जिसे मैंने तब संपादित किया। उदाहरण के लिए अगर एक सबफ़ोल्डर में 20 समान टाइप की गई फाइलें होती हैं जो व्यक्तिगत रूप से उस बिंदु पर महत्वपूर्ण नहीं थीं जो मैं बना रहा था, तो मैंने सिर्फ दो को छोड़ दिया और बाकी को एक ... लाइन के साथ बदल दिया। मैंने फिर से सांत्वना देने के लिए फाइल को प्रिंट किया और स्क्रीन को पकड़ा। स्क्रीन हथियाने से पहले मुझे अग्रभूमि रंग को काले और पृष्ठभूमि रंग को सफेद में बदलना पड़ा, बेहतर दिखने के लिए और दस्तावेज़ में स्याही को सहेजना चाहिए जो मुद्रित होना चाहिए।

यह बहुत आश्चर्यजनक है कि इसके लिए कोई बेहतर उपकरण नहीं है। अगर मेरे पास समय होता, तो मैं एक Visio Extension लिखता या कुछ कमांड लाइन हो सकती है जो SVG का उत्पादन करती है। एसवीजी एचटीएमएल 5 घटिया है, यहां तक ​​कि ऑनलाइन प्रलेखन में दर्द रहित समावेश की भी अनुमति देगा।

अद्यतन 2017-10-17। मुझे खेद है कि एसओ से संबंधित नहीं होने के कारण यह प्रश्न हटा दिया गया। इसलिए मैंने इसे फिर से शब्द दिया है। मुझे एक स्क्रिप्ट चाहिए - एक WYSIWYG टूल नहीं। इसलिए कोई भी स्क्रिप्टिंग भाषा या लाइब्रेरी ठीक है। तो यह एक कोड लेखन प्रश्न है, और मेरा मानना ​​है कि एसओ का है।


10
यह सवाल बंद क्यों है? पेड़ों को खींचने के लिए प्रोग्रामिंग डीएसएल है: जैसे कि ग्राफविज़ जैसे उपकरण जो इसे "प्रोग्रामेटिक रूप से" हल कर सकते हैं।
पायोत्र लेसनकी

5
मैं इसे (अस्थायी रूप से) फिर से खोलने जा रहा हूं क्योंकि अगर यह एक सरल "मैं कैसे दिखाऊं कि स्क्रीन पर क्या है", तो उसने स्क्रीन धरनेवाला के लिए कहा होगा। यदि वह इसे आकर्षित करना चाहता है, तो यह संभवतः डिज़ाइन डॉक या प्रस्तुति के लिए है, इसलिए वह किसी बिंदु पर प्रोग्रामिंग करेगा।
पैक्साडैब्लो

2
माना। मुझे पहले भी इसी प्रकार की कार्यक्षमता की आवश्यकता है और Visio के साथ इसे फ़ेकिंग का सहारा लिया है। यूरोपीय संघ के प्रलेखन के लिए इसकी आवश्यकता है। निश्चित रूप से कोड से संबंधित था।
जोसेफ फेरिस

6
बहुत बेवकूफ, इस विषय के रूप में बंद करने के लिए। मैं भी कुछ के लिए एक की जरूरत है मिल गया है .. तो सेंसर करने के लिए प्यार करता है।
बोल्टिमुस

1
मुझे खेद है अगर मेरा प्रश्न यहाँ विषय से दूर है। मैं इसका कारण समझता हूं। उन सभी के लिए धन्यवाद, जिन्होंने मदद की, यह मददगार था। स्पष्ट करने के लिए, मुझे प्रोजेक्ट ट्री के प्रलेखन में शामिल करने के लिए आरेख की आवश्यकता है। स्क्रीनशॉट इसे काटता नहीं है क्योंकि पूरे पेड़ एक स्क्रीन फिट बैठता है की तुलना में लंबा है।
माइकल

जवाबों:


95

MS-DOS treeकमांड से कॉपी करना और चिपकाना भी आपके काम आ सकता है। उदाहरण:

पेड़

C:\Foobar>tree
C:.
├───FooScripts
├───barconfig
├───Baz
│   ├───BadBaz
│   └───Drop
...

पेड़ / एफ

C:\Foobar>tree
C:.
├───FooScripts
│    foo.sh
├───barconfig
│    bar.xml
├───Baz
│   ├───BadBaz
│   │    badbaz.xml
│   └───Drop
...

पेड़ / ए

C:\Foobar>tree /A
C:.
+---FooScripts
+---barconfig
+---Baz
¦   +---BadBaz
¦   \---Drop
...

पेड़ / एफ / ए

C:\Foobar>tree /A
C:.
+---FooScripts
¦    foo.sh
+---barconfig
¦    bar.xml
+---Baz
¦   +---BadBaz
¦   ¦    badbaz.xml
¦   \---Drop
...

सिंटेक्स [ स्रोत ]

tree[ drive:] [ path] [ /F] [ /A]

drive:\path - डिस्क और निर्देशिका युक्त डिस्क, निर्देशिका संरचना के प्रदर्शन के लिए, फाइलों को सूचीबद्ध किए बिना।

/F - हर निर्देशिका में रहने वाली सभी फाइलों को शामिल करें।

/A- ग्राफिक वर्णों के बजाय, अतिरिक्त वर्णों के साथ लाइनों को जोड़ने के लिए उपयोग किए गए ग्राफ़िक वर्णों को बदलें। /aका उपयोग उन कोड पृष्ठों के साथ किया जाता है जो ग्राफिक वर्णों का समर्थन नहीं करते हैं और प्रिंटर को आउटपुट भेजने के लिए जो ग्राफिक वर्णों की ठीक से व्याख्या नहीं करते हैं।


1
अच्छा विचार है, लेकिन अगर उच्चारण पत्रों के साथ फाइलें / फ़ोल्डर हैं, तो वे ओईएस चारसेट में होंगे, एएनएसआई नहीं। संभवत: अधिकांश (अंग्रेजी बोलने वाले कम से कम) उपयोगकर्ताओं के लिए एक गैर-मुद्दा है। अर्ध-ग्राफिक वर्णों के लिए भी।
फीलो

4
लिनक्स में भी इस तरह का "ट्री" कमांड होता है, मैंने इस स्टैक ओवरफ्लो प्रश्न को देखने के बाद ही खोजा है। मुझे जिस नाम की तलाश करनी चाहिए, उसे इंगित करने के लिए धन्यवाद! "ट्री-ए" सुंदर ड्राइंग-पात्रों का उपयोग करके पेड़ को कैसे बनाया जाए; सादा "वृक्ष" सिर्फ ASCII तक ही सीमित है।
ब्रैंडन रोड्स

1
अच्छा है, मैं भी इस आदेश को नहीं जानता था
MiniScalope

कई विकल्प मौजूद हैं, उन्हें लाने के लिए सभी का धन्यवाद। मैं इसे एक उत्तर मानता हूं, क्योंकि मैं अंत में यही प्रयोग करता हूं।
माइकल

1
या इसे सीधे फाइल में सेव करें: tree > file_structure.txtमुझे पता है कि यह यूनिक्स सिस्टम पर काम करता है। मुझे नहीं पता कि यह विंडोज पर भी काम करता है या नहीं।
लुसियो मोलिंडो

19

ग्राफविज़ - वेब पेज से:

ग्राफविज़ लेआउट कार्यक्रम एक सरल पाठ भाषा में रेखांकन का विवरण लेते हैं, और वेब पेजों के लिए छवियों और एसवीजी जैसे कई उपयोगी प्रारूपों में आरेख बनाते हैं, पीडीएफ या अन्य दस्तावेजों में शामिल करने के लिए पोस्टस्क्रिप्ट; या एक इंटरेक्टिव ग्राफ ब्राउज़र में प्रदर्शित। (ग्राफविज़ भी GXL, एक XML बोली का समर्थन करता है।)

यह सबसे सरल और सबसे अधिक उत्पादक उपकरण है जो मैंने विभिन्न प्रकार के बक्से और रेखाचित्र बनाने के लिए पाया है। मेरे पास Visio और OmniGraffle हैं और उपयोग करते हैं, लेकिन हमेशा "सिर्फ एक और समायोजन" करने का प्रलोभन होता है।

ग्रेफिज उपभोग करने वाले "डॉट फ़ाइल" प्रारूप का उत्पादन करने के लिए कोड लिखना भी काफी आसान है, इसलिए स्वचालित आरेख उत्पादन भी पहुंच के भीतर होता है।


5

जैसा कि वादा किया गया था, यहाँ मेरा काहिरा संस्करण है। मैंने इसे Lua के साथ लिपिबद्ध किया, निर्देशिकाओं को चलाने के लिए lfs का उपयोग किया। मुझे इन छोटी चुनौतियों से प्यार है, क्योंकि वे मुझे एपीआई का पता लगाने की अनुमति देते हैं जो मैं काफी समय से खोदना चाहता था ...
lfs और LuaCairo दोनों क्रॉस-प्लेटफॉर्म हैं, इसलिए इसे अन्य प्रणालियों (फ्रेंच WinXP प्रो SP3 पर परीक्षण) पर काम करना चाहिए।

जैसे ही मैंने पेड़ पर चढ़ा, मैंने एक पहला संस्करण ड्राइंग फ़ाइल नाम बनाया। लाभ: कोई स्मृति उपरिव्यय। असुविधा: मुझे पहले से छवि का आकार निर्दिष्ट करना है, इसलिए लिस्टिंग के कट जाने की संभावना है।

इसलिए मैंने इस संस्करण को बनाया, पहले डायरेक्टरी ट्री को चलते हुए, इसे एक लुआ टेबल में संग्रहीत किया। फिर, फ़ाइलों की संख्या जानने के लिए, कैनवास को फिट करने के लिए (कम से कम लंबवत) बनाने और नामों को आरेखित करना।
आप आसानी से PNG रेंडरिंग और SVG वन के बीच स्विच कर सकते हैं। उत्तरार्द्ध के साथ समस्या: काहिरा इसे निम्न स्तर पर उत्पन्न करता है, एसवीजी की पाठ क्षमता का उपयोग करने के बजाय अक्षरों को खींचता है। ठीक है, कम से कम, यह फ़ॉन्ट के बिना सिस्टम पर भी सटीक रेंडरिंग की गारंटी देता है। लेकिन फाइलें बड़ी हैं ... वास्तव में एक समस्या नहीं है यदि आप इसे .svgz फाइल करने के बाद इसे संक्षिप्त करते हैं।
या सीधे एसवीजी उत्पन्न करना बहुत कठिन नहीं होना चाहिए, मैंने अतीत में एसवीजी उत्पन्न करने के लिए लुआ का उपयोग किया था।

-- LuaFileSystem <http://www.keplerproject.org/luafilesystem/>
require"lfs"
-- LuaCairo <http://www.dynaset.org/dogusanh/>
require"lcairo"
local CAIRO = cairo


local PI = math.pi
local TWO_PI = 2 * PI

--~ local dirToList = arg[1] or "C:/PrgCmdLine/Graphviz"
--~ local dirToList = arg[1] or "C:/PrgCmdLine/Tecgraf"
local dirToList = arg[1] or "C:/PrgCmdLine/tcc"
-- Ensure path ends with /
dirToList = string.gsub(dirToList, "([^/])$", "%1/")
print("Listing: " .. dirToList)
local fileNb = 0

--~ outputType = 'svg'
outputType = 'png'

-- dirToList must have a trailing slash
function ListDirectory(dirToList)
  local dirListing = {}
  for file in lfs.dir(dirToList) do
    if file ~= ".." and file ~= "." then
      local fileAttr = lfs.attributes(dirToList .. file)
      if fileAttr.mode == "directory" then
        dirListing[file] = ListDirectory(dirToList .. file .. '/')
      else
        dirListing[file] = ""
      end
      fileNb = fileNb + 1
    end
  end
  return dirListing
end

--dofile[[../Lua/DumpObject.lua]] -- My own dump routine
local dirListing = ListDirectory(dirToList)
--~ print("\n" .. DumpObject(dirListing))
print("Found " .. fileNb .. " files")

--~ os.exit()

-- Constants to change to adjust aspect
local initialOffsetX = 20
local offsetY = 50
local offsetIncrementX = 20
local offsetIncrementY = 12
local iconOffset = 10

local width = 800 -- Still arbitrary
local titleHeight = width/50
local height = offsetIncrementY * (fileNb + 1) + titleHeight
local outfile = "CairoDirTree." .. outputType

local ctxSurface
if outputType == 'svg' then
  ctxSurface = cairo.SvgSurface(outfile, width, height)
else
  ctxSurface = cairo.ImageSurface(CAIRO.FORMAT_RGB24, width, height)
end
local ctx = cairo.Context(ctxSurface)

-- Display a file name
-- file is the file name to display
-- offsetX is the indentation
function DisplayFile(file, bIsDir, offsetX)
  if bIsDir then
    ctx:save()
    ctx:select_font_face("Sans", CAIRO.FONT_SLANT_NORMAL, CAIRO.FONT_WEIGHT_BOLD)
    ctx:set_source_rgb(0.5, 0.0, 0.7)
  end

  -- Display file name
  ctx:move_to(offsetX, offsetY)
  ctx:show_text(file)

  if bIsDir then
    ctx:new_sub_path() -- Position independent of latest move_to
    -- Draw arc with absolute coordinates
    ctx:arc(offsetX - iconOffset, offsetY - offsetIncrementY/3, offsetIncrementY/3, 0, TWO_PI)
    -- Violet disk
    ctx:set_source_rgb(0.7, 0.0, 0.7)
    ctx:fill()
    ctx:restore() -- Restore original settings
  end

  -- Increment line offset
  offsetY = offsetY + offsetIncrementY
end

-- Erase background (white)
ctx:set_source_rgb(1.0, 1.0, 1.0)
ctx:paint()

--~ ctx:set_line_width(0.01)

-- Draw in dark blue
ctx:set_source_rgb(0.0, 0.0, 0.3)
ctx:select_font_face("Sans", CAIRO.FONT_SLANT_NORMAL, CAIRO.FONT_WEIGHT_BOLD)
ctx:set_font_size(titleHeight)
ctx:move_to(5, titleHeight)
-- Display title
ctx:show_text("Directory tree of " .. dirToList)

-- Select font for file names
ctx:select_font_face("Sans", CAIRO.FONT_SLANT_NORMAL, CAIRO.FONT_WEIGHT_NORMAL)
ctx:set_font_size(10)
offsetY = titleHeight * 2

-- Do the job
function DisplayDirectory(dirToList, offsetX)
  for k, v in pairs(dirToList) do
--~ print(k, v)
    if type(v) == "table" then
      -- Sub-directory
      DisplayFile(k, true, offsetX)
      DisplayDirectory(v, offsetX + offsetIncrementX)
    else
      DisplayFile(k, false, offsetX)
    end
  end
end

DisplayDirectory(dirListing, initialOffsetX)

if outputType == 'svg' then
    cairo.show_page(ctx)
else
  --cairo.surface_write_to_png(ctxSurface, outfile)
  ctxSurface:write_to_png(outfile)
end

ctx:destroy()
ctxSurface:destroy()

print("Found " .. fileNb .. " files")

बेशक, आप शैलियों को बदल सकते हैं। मैंने कनेक्शन लाइनें नहीं खींचीं, मैंने इसे आवश्यक नहीं देखा। मैं उन्हें बाद में वैकल्पिक रूप से जोड़ सकता हूं।


3

आप विंडोज फाइल सिस्टम पर सिर्फ एक फाइल संरचना क्यों नहीं बना सकते हैं और इसे अपने वांछित नामों के साथ पॉप्युलेट कर सकते हैं, फिर एक्सप्लोरर विंडो के एक भाग को कैप्चर करने के लिए हाइपरस्नाप (या सर्वव्यापी Alt-PrtScr) जैसे स्क्रीन धरनेवाला का उपयोग करें।

मैंने ऐसा तब किया था जब एक इंटरनेट एप्लिकेशन को 'डेमो' किया गया था, जो टूटने योग्य वर्गों में होगा, मुझे बस ऐसी फाइलें बनानी थीं जो मेरी इच्छित प्रविष्टियों की तरह दिखती थीं।

HyperSnap कम से कम JPG देता है (शायद दूसरों को लेकिन मैंने कभी जांच करने की जहमत नहीं उठाई)।

या आप एक्सप्लोरर से आइकनों +/- को कैप्चर कर सकते हैं और एमएस वर्ड ड्रॉ के भीतर उनका उपयोग अपनी तस्वीर करने के लिए कर सकते हैं, लेकिन मैं कभी भी एमएस वर्ड ड्रा को ठीक से व्यवहार करने में सक्षम नहीं हुआ।


2

ग्राफविज़ का उपयोग करने की सलाह अच्छी है: आप डॉट फ़ाइल को उत्पन्न कर सकते हैं और यह तारों को मापने का कठिन काम करेगा, लेआउट इत्यादि को करेगा। साथ ही यह वेक्टर सहित कई स्वरूपों में ग्राफ़ को आउटपुट कर सकता है।

मुझे एक पर्ल प्रोग्राम ठीक मिला, जो एक मेलिंग सूची में है, लेकिन मैं अभी इसे वापस नहीं पा सकता हूँ! मैंने नमूना डॉट फ़ाइल की प्रतिलिपि बनाई और इसका अध्ययन किया, क्योंकि मुझे इस घोषणात्मक वाक्यविन्यास का ज्यादा पता नहीं है और मैं थोड़ा और सीखना चाहता था।

समस्या: नवीनतम ग्राफविज़ के साथ, मेरे पास त्रुटियाँ हैं (या बल्कि, चेतावनियाँ, जैसा कि अंतिम आरेख उत्पन्न होता है), मूल ग्राफ़ और मेरे द्वारा लिखे गए दोनों (हाथ से)। कुछ खोजों से पता चला कि यह त्रुटि पुराने संस्करणों में पाई गई थी और हाल के संस्करणों में गायब हो गई थी। ऐसा लगता है कि यह वापस आ गया है।

मैं अभी भी फ़ाइल देता हूं, हो सकता है कि यह किसी के लिए एक शुरुआती बिंदु हो, या हो सकता है कि यह आपकी आवश्यकताओं के लिए पर्याप्त हो (बेशक, आपको अभी भी इसे उत्पन्न करना है)।

digraph tree
{
  rankdir=LR;

  DirTree [label="Directory Tree" shape=box]

  a_Foo_txt [shape=point]
  f_Foo_txt [label="Foo.txt", shape=none]
  a_Foo_txt -> f_Foo_txt

  a_Foo_Bar_html [shape=point]
  f_Foo_Bar_html [label="Foo Bar.html", shape=none]
  a_Foo_Bar_html -> f_Foo_Bar_html

  a_Bar_png [shape=point]
  f_Bar_png [label="Bar.png", shape=none]
  a_Bar_png -> f_Bar_png

  a_Some_Dir [shape=point]
  d_Some_Dir [label="Some Dir", shape=ellipse]
  a_Some_Dir -> d_Some_Dir

  a_VBE_C_reg [shape=point]
  f_VBE_C_reg [label="VBE_C.reg", shape=none]
  a_VBE_C_reg -> f_VBE_C_reg

  a_P_Folder [shape=point]
  d_P_Folder [label="P Folder", shape=ellipse]
  a_P_Folder -> d_P_Folder

  a_Processing_20081117_7z [shape=point]
  f_Processing_20081117_7z [label="Processing-20081117.7z", shape=none]
  a_Processing_20081117_7z -> f_Processing_20081117_7z

  a_UsefulBits_lua [shape=point]
  f_UsefulBits_lua [label="UsefulBits.lua", shape=none]
  a_UsefulBits_lua -> f_UsefulBits_lua

  a_Graphviz [shape=point]
  d_Graphviz [label="Graphviz", shape=ellipse]
  a_Graphviz -> d_Graphviz

  a_Tree_dot [shape=point]
  f_Tree_dot [label="Tree.dot", shape=none]
  a_Tree_dot -> f_Tree_dot

  {
    rank=same;
    DirTree -> a_Foo_txt -> a_Foo_Bar_html -> a_Bar_png -> a_Some_Dir -> a_Graphviz [arrowhead=none]
  }
  {
    rank=same;
    d_Some_Dir -> a_VBE_C_reg -> a_P_Folder -> a_UsefulBits_lua [arrowhead=none]
  }
  {
    rank=same;
    d_P_Folder -> a_Processing_20081117_7z [arrowhead=none]
  }
  {
    rank=same;
    d_Graphviz -> a_Tree_dot [arrowhead=none]
  }
}

> dot -Tpng Tree.dot -o Tree.png
Error: lost DirTree a_Foo_txt edge
Error: lost a_Foo_txt a_Foo_Bar_html edge
Error: lost a_Foo_Bar_html a_Bar_png edge
Error: lost a_Bar_png a_Some_Dir edge
Error: lost a_Some_Dir a_Graphviz edge
Error: lost d_Some_Dir a_VBE_C_reg edge
Error: lost a_VBE_C_reg a_P_Folder edge
Error: lost a_P_Folder a_UsefulBits_lua edge
Error: lost d_P_Folder a_Processing_20081117_7z edge
Error: lost d_Graphviz a_Tree_dot edge

मैं काहिरा का उपयोग करते हुए एक और दिशा की कोशिश करूंगा, जो कई प्रारूपों का निर्यात करने में भी सक्षम है। यह अधिक काम (कंप्यूटिंग पोजीशन / ऑफसेट) है, लेकिन संरचना सरल है, बहुत कठिन नहीं होनी चाहिए।


1
स्टीव डीरोस की पर्ल्सस्क्रिप्ट फ़ाइल-संरचना बना रही है -> dotose
claj
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.