ডিরেক্টরিটি কীভাবে ট্যারি করতে হবে এবং তারপরে ডিরেক্টরি সহ মূলগুলি কীভাবে সরাবেন?


30

আমি tar'মাই_ডাইরেক্টরি' নামে একটি ডিরেক্টরিতে ফাইল সংগ্রহের চেষ্টা করছি এবং কমান্ডটি ব্যবহার করে মূলগুলি সরিয়ে ফেলছি:

tar -cvf files.tar my_directory --remove-files

তবে এটি কেবল ডিরেক্টরিতে পৃথক ফাইলগুলি সরিয়ে ফেলছে এবং ডিরেক্টরিটি নিজেই নয় (যা আমি আদেশে নির্দিষ্ট করেছি)। আমি এখানে কি মিস করছি?

সম্পাদনা করুন:

হ্যাঁ, আমি মনে করি যে 'অপসারণ-ফাইলগুলি' বিকল্পটি মোটামুটি আক্ষরিক। যদিও আমিও সেই পৃষ্ঠাটিতে অস্পষ্ট পৃষ্ঠাটি পেয়েছি found (লিনাক্সে আমি ডিরেক্টরী এবং ফাইলগুলির মধ্যে খুব বেশি আলাদা করার প্রবণতা রাখি না, এবং কখনও কখনও ভুলে যাই যে সেগুলি একই জিনিস নয়)। দেখে মনে হচ্ছে conকমত্যটি এটি ডিরেক্টরিগুলি সরিয়ে দেয় না।

যাইহোক, এই প্রশ্নটি জিজ্ঞাসা করার জন্য আমার প্রধান প্রম্পটিং পয়েন্টটি তারের নিখুঁত পাথগুলি পরিচালনা থেকে শুরু করে। যেহেতু আপনাকে সংকুচিত হওয়ার জন্য কোনও ফাইল / গুলি সম্পর্কিত একটি আপেক্ষিক পথ নির্দিষ্ট করতে হবে, সুতরাং এটি সঠিকভাবে টানানোর জন্য আপনাকে অবশ্যই পিতামাতার ডিরেক্টরিতে পরিবর্তন করতে হবে। যেহেতু আমি দেখতে পাচ্ছি যে কোনও ধরণের ফলো-অন 'আরএম' কমান্ড ব্যবহার করা সেই পরিস্থিতিতে সম্ভাব্য বিপজ্জনক। এইভাবে আমি টার নিজেই অপসারণ করে জিনিসগুলি সরল করার আশা করছিলাম।

উদাহরণস্বরূপ, একটি ব্যাকআপ স্ক্রিপ্ট কল্পনা করুন যেখানে ব্যাকআপের ডিরেক্টরিটি (যেমন। টার) শেল ভেরিয়েবল হিসাবে অন্তর্ভুক্ত রয়েছে। যদি সেই শেল ভেরিয়েবলের মানটি খারাপভাবে প্রবেশ করানো হয় তবে সম্ভবত আপনি যে ডিরেক্টরিটি শেষের দিকে এসেছিলেন সেগুলি থেকে ফাইলগুলি মুছে ফেলা সম্ভব।


নিকোলাস, আপনার বক্তব্য যে এটি অতিরিক্ত পদক্ষেপে ডিরেক্টরিতে গাছটি মুছে ফেলার জন্য বিপদ যুক্ত করে তা একেবারেই বৈধ। আমি মনে করি প্রত্নতাকারীর দ্বারা এটি নিরাপদে করা সম্ভব ছিল। আমি আরও বিশ্বাস করি যে এটি জিএনইউ টারের নির্মাতাদের উদ্দেশ্য ছিল, কমপক্ষে এটি হওয়া উচিত ছিল ;-)
এমআইটি

2
আমি খুঁজে পেয়েছি - --remove-ফাইল বিকল্পটি অন্তত অন্তর্ভুক্ত dir - কমপক্ষে কিছু প্ল্যাটফর্মে / কিছু সংস্করণে - এবং আমার ক্ষেত্রে সরিয়ে দেয়। আপনার ক্ষেত্রে সম্ভবত কিছু ফাইল ট্যারি করার পরে সংশোধিত হওয়ার কারণে বাকী দির পুরোপুরি খালি ছিল না।
isync

@ আইসিএনসি আমি উবুন্টু 14.04-এ ডিরেক্টরি মুছে ফেলা - মুছে ফেলা ফাইলগুলি অনুভব করছি বলে মনে হচ্ছে। আমার ক্ষেত্রে ব্যতীত আমি এটি চাই না। হাহা
ব্র্যাডলি ওডেল

উত্তর:


12

আপনি সেই অংশটি নিখোঁজ করছেন যা বলছে যে --remove-filesবিকল্পটি সংরক্ষণাগারে যুক্ত করার পরে ফাইলগুলি সরিয়ে দেয় ।

আপনি সংরক্ষণাগারটি অনুসরণ করতে পারেন এবং ফাইল-অপসারণ অপারেশন যেমন কমান্ডের সাহায্যে,

সন্ধান / পাথ / টু / বে / আর্কাইভ / -ডেপথ-টাইপ ডি-এম্প্টি-এক্সেক আরএমডিির {} \;


আপডেট: আপনি এই সংক্ষিপ্ত
দেবিয়ান আলোচনাটি পড়তে আগ্রহী হতে পারেন, বাগ 424692: - সরানো-ফাইলগুলি অভিযোগ করে যে ডিরেক্টরিগুলি "আমরা এটি পড়ার সাথে সাথে পরিবর্তন করেছি"


সম্ভবত এটি আসলে: -cডিরেক্টরিটি tarকাজ শুরু করার আগে পরিবর্তন করে (এবং ধরণের কাজ শেষ না হওয়া পর্যন্ত ফিরে আসে না)? আমার ধারণা, এটি সাব-ডাইরেক্টরিগুলি মুছে ফেলত, যদি সেগুলি সংরক্ষণাগারটিতে অন্তর্ভুক্ত করা হত (তবে আমি এটি পরীক্ষা করি নি)।
আরজান

@ আরজান, আমি মনে করি না 'এর c'সাথে কিছু করার আছে; 'remove-files'ইচ্ছাকৃতভাবে ডিরেক্টরিগুলি সরান না।
নিক

আহা, আমি সংক্ষিপ্ত ব্যাখ্যাটি " manপৃষ্ঠাগুলি থেকে সংরক্ষণাগারে যুক্ত করার পরে ফাইলগুলি সরিয়ে ফেলুন" এতে খুব পরিষ্কার নয়, তবে আমি ধরে নিয়েছি আপনি ঠিক বলেছেন। তবুও আমি ডিরেক্টরির জন্য উল্লিখিত আশা করবেন চাই -cঅপসারণ করা হবে এমনকি যদি tar করেনি অপসারণ ডিরেক্টরি হিসাবে ভাল। (আমার কাছে, এটি বর্তমান ডিরেক্টরিটি মুছে ফেলার মতো হবে, সুতরাং সংরক্ষণাগারটি নিজেই সহ যখন ব্যবহার না করা -c...?) তবে যদি -remove-filesসর্বদা ডিরেক্টরিগুলি স্থানে রেখে যায় তবে আমি অবশ্যই এখানে কিছু জটিল করছি। ;-)
আরজান

3
--remove-filesবাগ ঠিক করা হয়েছিল tar-1.19
এক্স-ইয়ুরি

19

যেহেতু --remove-filesবিকল্প শুধুমাত্র ফাইল সরিয়ে ফেলা হবে , আপনি চেষ্টা করে দেখতে পারেন

tar -cvf files.tar my_directory && rm -R my_directory

যাতে ডিরেক্টরিটি কেবল তখনই সরিয়ে ফেলা হয় যদি tar0 এর প্রস্থান স্থিতি ফিরে আসে


9
আরএম করার আগে আপনার বাইরে থাকা প্রস্থান স্থিতি পরীক্ষা করা উচিত! অন্যথায় আপনাকে কোনও টাক আর্কাইভ এবং কোনও ফাইল ছাড়াই থাকতে পারে ...
কিম

1
একটি স্তরের ডিরেক্টরি ব্যবহার করার সময়, আমি একটি নিরাপদ বিকল্পটি 'আরএমডিআর' ব্যবহার না করে 'আরএম' ব্যবহার করব কারণ এটি কেবল একটি খালি ডিরেক্টরি মুছে ফেলবে। [প্রশ্ন সম্পাদনাগুলি দেখুন]
নিকোলাস

তবে rmdirকেবল খালি ডিরেক্টরিগুলি সরিয়ে দেয় । ধারণাটি ছিল ডিরেক্টরি এবং এতে থাকা ফাইলগুলি সরিয়ে দেওয়া (প্রদত্ত tarসফল)
প্যাভিয়াম

--remove-filesবাগ ঠিক করা হয়েছিল tar-1.19
এক্স-ইয়ুরি

পূর্ববর্তী কমান্ড 0 (সাফল্য) থেকে বেরিয়ে গেলে && কেবলমাত্র নিম্নলিখিত কমান্ডটি চালাবেন। এটি যদি> 0 থেকে প্রস্থান করে তবে নীচের কমান্ডটি চালানো হবে না। আপনি এটির সাথেও বিপরীত করতে পারেন || - প্রথম কমান্ড ব্যর্থ হলেই চালান। ভয়ানক সামগ্রী চেক করার ভাল উপায় সেইটিকে পুনরায় আরম্ভ করে।
কিরাস 11

6

আপনি কি সংরক্ষণাগার নামের পরে --remove-ফাইল নির্দেশিকা রাখার চেষ্টা করেছেন? এটা আমার জন্য কাজ করে.

tar -cvf files.tar --remove-files my_directory

1
এই প্রশ্নটি উত্থাপিত হওয়ার পরে টেরের আচরণের পরিবর্তন হওয়ার সম্ভাবনা বেশি। আমার জন্য, --remove-filesআগে বা পরে রাখার মধ্যে কোনও পার্থক্য নেই my_directory; উভয় ক্ষেত্রেই ডিরেক্টরিটি সরানো হয়।
রেডবার্ন

5
--remove-filesবাগ ঠিক করা হয়েছিল tar-1.19
এক্স-ইয়ুরি

1
source={directory argument}

যেমন

source={FULL ABSOLUTE PATH}/my_directory

 

parent={parent directory of argument}

যেমন

parent={ABSOLUTE PATH of 'my_directory'/

 

logFile={path to a run log that captures status messages}

তারপরে আপনি এর লাইন ধরে কিছু কার্যকর করতে পারেন:

cd ${parent}

tar cvf Tar_File.`date%Y%M%D_%H%M%S` ${source}

if [ $? != 0 ]

then

 echo "Backup FAILED for ${source} at `date` >> ${logFile}

else

 echo "Backup SUCCESS for ${source} at `date` >> ${logFile}

 rm -rf ${source}

fi

1

এটি সম্ভবত একটি বাগ ছিল।

এই ক্ষেত্রে "ফাইল" শব্দটি উদ্বেগজনক। তবে এটি একটি কমান্ড লাইন সুইচ হওয়ায় আমি এটিও ডিরেক্টরিগুলি বোঝার প্রত্যাশা করব কারণ ইউনিক্স / লনাক্সে সবকিছুই একটি ফাইল, একটি ডিরেক্টরি। (অন্য ব্যাখ্যাটি অবশ্যই বৈধ, তবে এই জাতীয় ডিরেক্টরিগুলি ডিরেক্টরি রাখার কোনও মানে হয় না I আমি এটি অপ্রত্যাশিত এবং বিভ্রান্তিমূলক আচরণ হিসাবে বিবেচনা করব))

তবে আমি দেখতে পেয়েছি যে কিছু বিতরণে গাণু টারে gnu টার আসলে ডিরেক্টরি গাছটিকে সরিয়ে দেয়। আরেকটি ইঙ্গিত যে গাছ রাখা একটি বাগ ছিল। অথবা এটি স্থির না করা পর্যন্ত কমপক্ষে কিছুটা কাজ করা উচিত।

এটি আমি একটি উবুন্টু 10.04 কনসোলে চেষ্টা করেছিলাম:

mit: / var / tmp $ mkdir ট্রি 1                                                                                               
mit: / var / tmp $ mkdir ট্রি 1 / সাব 1                                                                                          
mit: / var / tmp $> ট্রি 1 / সাব 1 / ফাইল 1                                                                                        

mit: / var / tmp $ ls -la                                                                                                    
drwxrwxrwt 4 রুট রুট 4096 2011-11-14 15:40।                                                                              
drwxr-xr-x 16 রুট রুট 4096 2011-02-25 03:15 ..
drwxr-xr-x 3 mit mit 4096 2011-11-14 15:40 ট্রি 1

mit: / var / tmp $ tar -czf ট্রি 1.tar.gz ট্রি 1 / - সরানো-ফাইলগুলি

# আপনি এখন যেভাবে গাছটি দেখতে পাচ্ছেন তা এখন:

mit: / var / tmp $ ls -la
drwxrwxrwt 3 রুট রুট 4096 2011-11-14 15:41।
drwxr-xr-x 16 রুট রুট 4096 2011-02-25 03:15 ..
-rw-r - r-- 1 mit mit 159 2011-11-14 15:41 ট্রি 1.টার.gz                                                                   


mit: / var / tmp $ tar --version                                                                                             
তার (জিএনইউ টার) 1.22                                                                                                           
কপিরাইট © ২০০৯ ফ্রি সফটওয়্যার ফাউন্ডেশন, ইনক।

আপনি যদি এটি আপনার মেশিনে দেখতে চান তবে এটি নিজের ঝুঁকিতে কনসোলে আটকে দিন:

tar --version                                                                                             
সিডি / ভার / টিএমপি
mkdir -p গাছ 1 / উপ 1                                                                                          
> ট্রি 1 / সাব 1 / ফাইল 1                                                                                        
tar -czf ট্রি 1.tar.gz ট্রি 1 / - রিমোভ-ফাইলগুলি
ls -la
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.