কেবল ফোল্ডার ফাইলই নকল করবেন না?


16

একটি সম্পূর্ণ ডিরেক্টরি কপি করার উপায় আছে, তবে কেবল ফোল্ডারগুলি? আমার ডিরেক্টরিতে আমার কোথাও একটি দূষিত ফাইল রয়েছে যা আমার হার্ড ডিস্কগুলিকে ব্যর্থ করে তুলছে।

সুতরাং দুর্নীতিগ্রস্থ ফাইলটিকে অন্য একটি হার্ড ডিস্কে অনুলিপি করার পরিবর্তে, আমি কেবল ফোল্ডারগুলি অনুলিপি করতে চেয়েছিলাম, কারণ আমার কাছে এমন স্ক্রিপ্ট রয়েছে যেগুলি কয়েকশ ফোল্ডার সন্ধান করে এবং আমি সেগুলি ম্যানুয়ালি তৈরি করতে চাই না।

আমি সিপি ম্যানুয়ালটি অনুসন্ধান করেছি, তবে কিছুই দেখতে পেলাম না (আমি এটি মিস করেছি)

বলুন আমার এই ব্যর্থ এইচডিডি তে আমার এই কাঠামো রয়েছে:

dir1
    files
    dir2
        files
        files
        dir4
dir3
files

আমি যা চাই তা হ'ল ডিরেক্টরি কাঠামো, কোনও ফাইলই নয়।

সুতরাং আমি নতুন এইচডিডি দিয়ে শেষ করব:

dir1
    dir2
        dir4
dir3

কেউ আশা করছেন কিছু কৌশল জানেন!


আপনি কি বোঝাতে চেয়েছেন যে আপনি কেবল ডিরেক্টরি স্ট্রোকরটি অনুলিপি করতে চান বা আপনি কি কেবলমাত্র বোঝাতে চান যে আপনি বর্তমান কার্যনির্বাহী ডিরেক্টরিতে (এবং আরও গভীরতর সাব-ডিরেক্টরিতে থাকা সমস্ত ফাইল গেম) ফাইলগুলি বাদ দিতে চান?
অলি

আমি একটি উদাহরণ যুক্ত করেছি। বিভ্রান্ত হওয়ার জন্য দুঃখিত
শ্যানন

1
এফওয়াইআই rsyncডিরেক্টরি কাঠামো অনুলিপি করতে এবং অনুমতি এবং বৈশিষ্ট্যগুলি বজায় রাখতে ব্যবহার করে] ( স্ট্যাকওভারফ্লো . com / a / 9242883 / 52074 )। প্লেইন ব্যবহার করা mkdir -p অনুমতি এবং বৈশিষ্ট্য সংরক্ষণ করে না
ট্রেভর বয়েড স্মিথ

উত্তর:


15

আপনি যদি একটি ডিরেক্টরি কঙ্কাল আয়না করতে চান এবং কোনও ফাইল অনুলিপি করতে চান:

find -type d -links 2 -exec mkdir -p "/path/to/backup/{}" \;

এখানে কি হচ্ছে:

আমি এটি এর পরিবর্তে এটি করেছি find -type d -exec mkdir -p "/path/to/backup/{}" \;কারণ এটি mkdirকলগুলির পুরো বোতাম লোড কেটে দেবে । আমরা খুব দ্রুত পরীক্ষা দিয়ে এটি প্রমাণ করতে পারি। আমি দুটি আদেশের তুলনা করতে দৌড়েছি তার পরে টেস্ট ট্রিটি এখানে রয়েছে:

$ tree
.
├── dir1
│   ├── dir2
│   │   └── dir3
│   ├── dir7
│   └── dir8
└── dir9
    └── dir0

$ pr -m -t <(find -type d) <(find -type d -links 2)
.                               ./dir1/dir8
./dir1                          ./dir1/dir2/dir3
./dir1/dir8                     ./dir1/dir7
./dir1/dir2                     ./dir9/dir0
./dir1/dir2/dir3
./dir1/dir7
./dir9                  
./dir9/dir0 

এবং এটি কেবলমাত্র হাজারো ডিরেক্টরি সহ একটি আসল-শব্দ সমাধানে আরও ভাল হতে চলেছে।


এই আমি নুব হয়ে যাচ্ছি, তবে আপনি ব্যাকআপটিতে অনুলিপি করতে কীভাবে পুরাতন দির সন্ধান করছেন? আমি এখানে কেবল একটি পাথ দেখতে পাচ্ছি
শ্যানন

আপনি যদি কোনও পাথ নির্দিষ্ট না করেন findতবে বর্তমান কার্য-ডিরেক্টরিটি প্রারম্ভিক পয়েন্ট হিসাবে ব্যবহার করে। আপনি যদি অন্য কোনও পথ ব্যবহার করতে চান তবে সিনট্যাক্সটি ব্যবহার করুন:find /path/to/search/ -type.....
অলি

সুতরাং আমি আমার ডিরেক্টরিটি একটি নির্দিষ্ট ফোল্ডারে সেট করেছি যাতে কঙ্কাল রয়েছে যা আমি অনুলিপি করতে চাইছি, চালাও find -type d -exec mkdir -p "/media/jinglez/TVSeries/TV Series"/{}" \;এবং সব ঠিকঠাক হওয়া উচিত? এটি কিছুটা সময় নিচ্ছে বলে মনে হচ্ছে: /
শ্যানন

আমি সাধারণ টার্মিনাল থেকে এটি চালান?
শ্যানন

1
তারা উভয়েরই এক্সিকিউটিজ ক্লজটি সন্ধানের জন্য নির্দিষ্ট। {} মানে বর্তমান "পাওয়া" ফাইলের নাম এবং \; ক্লজটি শেষ করার জন্য কেবল পালানো। এর চেহারা অনুসারে, আপনার কোডে কোনও অতিরিক্ত "ভাল নেই, আমি নিশ্চিত ... অবশ্যই পড়া উচিত:find -type d -links 2 -exec mkdir -p "/media/jinglez/TVSeries/TV Series/{}" \;
অলি

2

পাইথন ওয়ান-লাইনার দিয়ে খুব সহজেই সম্পন্ন করা হয়েছে:

bash-4.3$ tree
.
├── ABC
├── set_pathname_icon.py
├── subdir1
│   ├── file1.abc
│   └── file2.abc
├── subdir2
│   ├── file1.abc
│   └── file2.abc
└── subdir3
    └── subdir4
        └── file1.txt

4 directories, 7 files
bash-4.3$ 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
bash-4.3$ tree ~/new_destination
/home/xieerqi/new_destination
├── subdir1
├── subdir2
└── subdir3
    └── subdir4

স্ক্রিপ্ট হিসাবে এটি আবার লিখতে পারে:

#!/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)) 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.