ফোল্ডার কাঠামো (ফাইল ছাড়াই) এক অবস্থান থেকে অন্য জায়গায় অনুলিপি করুন


100

আমি আমাদের মাল্টি-টেরাবাইট ফাইল সার্ভারের কাঠামোর ক্লোন তৈরি করতে চাই। আমি জানি যে সিপি - প্যারেন্টস কোনও ফাইল সরিয়ে নিতে পারে এবং এর মূল কাঠামো, তবে ডিরেক্টরি কাঠামো অক্ষত রাখার কোনও উপায় আছে কি?

আমি একটি লিনাক্স সিস্টেমে অনুলিপি করতে চাই এবং আমাদের ফাইল সার্ভারটি সেখানে সিআইএফএস লাগানো আছে।



উপরের মন্তব্য পোস্ট থেকে আরএসসিএনসি সমাধানটি আরও সুন্দর দেখায়।
ইয়ে

উত্তর:


164

আপনি যেমন কিছু করতে পারেন:

find . -type d > dirs.txt

ডিরেক্টরি তালিকা তৈরি করতে, তারপর

xargs mkdir -p < dirs.txt

গন্তব্য ডিরেক্টরিতে।


8
আপনার ডিরেক্টরিতে যদি আপনার নামের নাম ফাঁকা থাকে তবে এই সমাধানগুলি কাজ করবে না।
জেলি

33
@ জেলি কমান্ডগুলিতে find . -type d -print0 >dirs.txtএবং পরিবর্তন করুন xargs -0 mkdir -p <dirs.txt। এটি উভয় কমান্ডের জন্য সাদা স্থানের পরিবর্তে পৃথক হিসাবে নাল ব্যবহার করবে।
ব্যবহারকারী1207177

4
xargsআপনি শত বা হাজারের অর্ডার নিয়ে কাজ করতে শুরু করলে সিস্টেমের সর্বাধিক কমান্ডের দৈর্ঘ্য অতিক্রম করতে পারে, তাই এটিকে সতর্কতার সাথে ব্যবহার করুন। (এর সাথে কমান্ডের দৈর্ঘ্যের সীমাটি সন্ধান করুন getconf ARG_MAX)) প্রচুর ডিরেক্টরি সহ, আপনাকে পরিবর্তে আউটপুটটি লুপ করতে একটি স্ক্রিপ্ট লিখতে হতে পারে।
পালসুইম

4
এবং অনুমতি এবং বৈশিষ্ট্যগুলি কী তা বজায় রাখা হবে ??
আশীষ কার্পে

4
@ ট্রেভরবয়েডস্মিথ: আপনার মন্তব্যের জন্য ধন্যবাদ। মূল প্রশ্নে অনুমতি, মালিকানা, বা বৈশিষ্ট্য সংরক্ষণের প্রয়োজন সম্পর্কে কিছুই উল্লেখ করা হয়নি। আপনি উল্লেখ হিসাবে এটি করার জন্য একটি পৃথক সমাধানের প্রয়োজন হবে, তবে উপরে বর্ণিত প্রশ্নের উত্তর দেওয়ার জন্য যথেষ্ট।
গ্রেগ হিউগিল

82
cd /path/to/directories &&
find . -type d -exec mkdir -p -- /path/to/backup/{} \;

4
আমার সাথে সন্ধানের সেরা উত্তর। অন্যথায় আপনি এই এসও প্রশ্নেrsync চেন লেভি উত্তর থেকে সমাধান চেষ্টা করতে পারেন
মাদ এম এম

4
- mkdir এর বিকল্পটি কী করে?
ব্রুস_ওয়ারিয়ার

10
--হ'ল মানক জিএনইউ ইউটিলিটি অপশন টার্মিনেটর। এর অর্থ "আরে এমকিডির, এর পরে যে কোনও যুক্তি, এটি পতাকা নয়, সুতরাং এটি একটি ফাইল আর্গুমেন্ট হিসাবে বিবেচনা করুন, এমনকি যদি এটি '-' অক্ষর দিয়ে শুরু হয়।"
অ্যাম্ফেটামাচাইন

4
এই উত্তরটি ডিরেক্টরি অনুমতি এবং বৈশিষ্ট্য ধরে রাখে নাঅনুমতিগুলি এবং বৈশিষ্ট্যগুলি সংরক্ষণ করতে rynsc ব্যবহার করুন
ট্রেভর বয়ড স্মিথ

39

আরএসসিএনসি ব্যবহার করে এখানে একটি সহজ সমাধান:

rsync -av -f"+ */" -f"- *" "$source" "$target"
  • এক লাইন
  • স্থানগুলির সাথে কোনও সমস্যা নেই
  • অনুমতি সংরক্ষণ করুন

আমি এই সমাধানটি সেখানে পেয়েছি


11
একই তবে আরও পঠনযোগ্যrsync -a --include '*/' --exclude '*' "$source" "$target"
সিলভাইন

4
এই সমাধানটিতে সমস্যাটি হ'ল: আমার ফোল্ডারে কয়েক হাজার ফাইল রয়েছে এবং আরএসইএনসি কয়েক ডজন ফোল্ডার সিঙ্ক করতে বয়সগুলি গ্রহণ করে।
ক্রিস্টোফার কে।

7

আপনি লিনাক্সের জন্য কোনও সমাধান খুঁজছেন তবে আমি জানি না। যদি তা হয় তবে আপনি এটি চেষ্টা করতে পারেন:

$ mkdir destdir
$ cd sourcedir
$ find . -type d | cpio -pdvm destdir

কমপক্ষে আপনার নির্দিষ্ট পরামিতিগুলির সাথে সিপিও আমার পক্ষে কাজ করে না বলে মনে হচ্ছে।
r00fus

@ r00fus - দয়া করে সিপিওর জন্য ম্যানুয়ালটি পড়ুন বা gnu.org/software/cpio
জেরোডিন

6

এটি ডিরেক্টরি এবং ফাইলগুলির বৈশিষ্ট্যগুলি অনুলিপি করে তবে ফাইলগুলির ডেটা নয়:

cp -R --attributes-only SOURCE DEST

তারপরে আপনি যদি ফাইলগুলিতে আগ্রহী না হন তবে আপনি মুছে ফেলতে পারেন:

find DEST -type f -exec rm {} \;

4
এক্সেলেন্ট এক হতে পারে তবে আপনি মালিকানা সংরক্ষণ, টাইমস্ট্যাম্প এবং অনুমতিগুলি উল্লেখ করতে ভুলে গেছেন। সুতরাং এটি উইন 7 / সাইগউইন - NULL_SID ব্যবহারকারী, ভুল অনুমতিগুলির আদেশ, অনুমতিগুলি সম্পাদনা করতে পারে না ইত্যাদিতে কোনও বিশৃঙ্খলা তৈরি করে এবং উত্পাদিত ফাইল কাঠামো অ্যাক্সেস করতে পারে না।
ওয়েবকোমার

4
আমার মনে করা উচিত যে সত্যিকারের কাজের জন্য উইন্ডোজকে ব্যবহার করার চেষ্টা করে তার জন্য দোষটি পুরোপুরিই রয়েছে।
ট্রিপলি

সিপি -আর - কেবলমাত্র -পরিচয় - সমস্ত সংরক্ষণ করুন --v উত্স-শেষ
গ্যাবার

2

নিম্নলিখিত সমাধানটি আমার জন্য বিভিন্ন পরিবেশে ভালভাবে কাজ করেছে:

sourceDir="some/directory"
targetDir="any/other/directory"

find "$sourceDir" -type d | sed -e "s?$sourceDir?$targetDir?" | xargs mkdir -p

2

এইটা কাজ করে:

find ./<SOURCE_DIR>/ -type d | sed 's/\.\/<SOURCE_DIR>//g' | xargs -I {} mkdir -p <DEST_DIR>"/{}"

কেবলমাত্র SOURCE_DIR এবং DEST_DIR প্রতিস্থাপন করুন।


2

এটি হোয়াইট স্পেসগুলির সাথে সমস্যাটিও সমাধান করে:

মূল / উত্স দির মধ্যে:

find . -type d -exec echo "'{}'" \; > dirs2.txt

তারপরে এটি নতুনভাবে নির্মিত দিরটিতে পুনরায় তৈরি করুন:

mkdir -p <../<SOURCEDIR>/dirs2.txt

1

বিকল্প target_dirএবং source_dirউপযুক্ত মান সহ:

cd target_dir && (cd source_dir; find . -type d ! -name .) | xargs -i mkdir -p "{}"

ওএসএক্স + উবুন্টুতে পরীক্ষিত।


0

সের্গি কলডিয়াজহনিয়ের একটি অজগর স্ক্রিপ্ট কি কেবল ফোল্ডারগুলি অনুলিপি করে পোস্ট করা হয় ? :

#!/usr/bin/env python
import os,sys
dirs=[ r for r,s,f in os.walk(".") if r != "."]
for i in dirs:
    os.makedirs(os.path.join(sys.argv[1],i)) 

বা শেল থেকে:

python -c 'import os,sys;dirs=[ r for r,s,f in os.walk(".") if r != "."];[os.makedirs(os.path.join(sys.argv[1],i)) for i in dirs]' ~/new_destination

এফওয়াইআই:


0

আর একটি পদ্ধতির ব্যবহার treeহ'ল এটির দৃ hand় বিকল্পগুলির উপর ভিত্তি করে দুর্দান্ত গাছ এবং নেভিগেট ডিরেক্টরি গাছ। কেবলমাত্র ডিরেক্টরি ডিরেক্টরি রয়েছে, খালি ডিরেক্টরি বাদ দিন, প্যাটার্ন সহ নাম বাদ দিন, প্যাটার্ন সহ কেবল নাম অন্তর্ভুক্ত করা উচিত etc.man tree

সুবিধা : আপনি তালিকাটি সম্পাদনা বা পর্যালোচনা করতে পারেন, বা যদি আপনি প্রচুর স্ক্রিপ্টিং করেন এবং ঘন ঘন খালি ডিরেক্টরি তৈরি করেন

পদ্ধতির : ডিরেক্টরি ব্যবহার করে ডিরেক্টরিগুলির তালিকা তৈরি করুন tree, সেই তালিকাটি আর্গুমেন্ট ইনপুট হিসাবে ব্যবহার করুনmkdir

tree -dfi --noreport > some_dir_file.txt

-dfi কেবল ডিরেক্টরি তালিকাবদ্ধ করে, প্রতিটি নামের পুরো পথ প্রিন্ট করে, গাছকে ইনডেন্টেশন লাইনগুলি প্রিন্ট করে না,

--noreport গাছের তালিকা শেষে ফাইলের ডিরেক্টরি মুদ্রণ ও ডিরেক্টরি রিপোর্টটি সরিয়ে দেয়, কেবল আউটপুট ফাইলটিতে কোনও ফ্লাফ না থাকে

তারপরে আপনি যে গন্তব্যটিতে খালি ডিরেক্টরিগুলি চান এবং সেখানে চালিত হন ute

xargs mkdir < some_dir_file.txt

0
find source/ -type f  | rsync -a --exclude-from - source/ target/

কপির সাথে সম্পর্কিত কেবল অনুমতি এবং মালিকানা সহ কপি করুন


0

1 লাইন সমাধান:

find . -type d -exec mkdir -p /path/to/copy/directory/tree/{} \;

-1

আপনি যদি উইন্ডোজ মেশিন থেকে অ্যাক্সেস পেতে পারেন তবে আপনি কেবলমাত্র ফোল্ডার কাঠামোটি অনুলিপি করতে / টি এবং / ই সহ এক্সকপি ব্যবহার করতে পারেন (/ ই খালি ফোল্ডারগুলি অন্তর্ভুক্ত করে)

http://ss64.com/nt/xcopy.html

[সম্পাদনা করুন!]

ডিরেক্টরিটি কাঠামোগত পুনরায় তৈরি করতে ফাইলগুলি ছাড়াই এটি আরএসসিএনসি ব্যবহার করে। http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html

আসলে ভাল হতে পারে :)


4
দুর্ভাগ্যক্রমে, আমাদের সিআইএফএস-পরিবেশনকারী ফাইলসভারটি উইন্ডো চালাচ্ছে না, তাই উইন কমান্ডগুলি করতে পারে না।
r00fus

আপনাকে ধন্যবাদ, আরএসসিএনসি পদ্ধতিটি আমার পক্ষে পুরোপুরি সূক্ষ্মভাবে কাজ করেছে। এটি ডিরেক্টরি নামের জায়গাগুলির সাথেও সামঞ্জস্যপূর্ণ।
গ্লুটোনিমেট

-1

পিএইচপি-তে এখানে একটি সমাধান রয়েছে যা:

  • ডিরেক্টরিগুলি অনুলিপি করে (পুনরাবৃত্তভাবে নয়, কেবলমাত্র একটি স্তর)
  • অনুমতি সংরক্ষণ করে
  • আরএসআইএনসি সমাধানের বিপরীতে, হাজার হাজার ফাইলযুক্ত ডিরেক্টরিগুলি দ্রুত এমনকি এটি ফোল্ডারেও যায় না
  • স্পেস নিয়ে কোনও সমস্যা নেই
  • পড়া এবং সামঞ্জস্য করা সহজ হওয়া উচিত

syncDirs.phpএই বিষয়বস্তুর মতো একটি ফাইল তৈরি করুন :

<?php
foreach (new DirectoryIterator($argv[1]) as $f) {
    if($f->isDot() || !$f->isDir()) continue;
        mkdir($argv[2].'/'.$f->getFilename(), $f->getPerms());
        chown($argv[2].'/'.$f->getFilename(), $f->getOwner());
        chgrp($argv[2].'/'.$f->getFilename(), $f->getGroup());
}

এটিকে ব্যবহারকারী হিসাবে চালান যার পর্যাপ্ত অধিকার রয়েছে:

sudo php syncDirs.php /var/source /var/destination


আপনাকে পিএইচপি পছন্দ করতে হবে না এবং আপনাকে এটি ব্যবহার করতে হবে না। তবে ওপি নির্দিষ্টভাবে কোনও ভাষায় সমাধান চায় কিনা তা নির্দিষ্ট করে না এবং এটির মতো, পিএইচপি প্রচুর লিনাক্স সিস্টেমে ইনস্টল করা হয় কারণ ওয়েবের ৮০% পিএইচপি ( w3techs.com/technologies/details/pl- ব্যবহার করে ) পিএইচপি / সমস্ত / সমস্ত )।
ক্রিস্টোফার কে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.