আপনি কীভাবে একটি ডিরেক্টরিতে নিরাপদে নিরাপদে ফাইলগুলি সরান?


10

ডিরেক্টরিতে যেখানে কয়েকশো বা কয়েক হাজার ফাইল থাকতে পারে সেখানে আমি কীভাবে ফাইলগুলিকে সরিয়ে ফেলতে পারি এবং ডুপ রয়েছে কিনা তা সম্পর্কে আপনি নিশ্চিত নন ..। আপনি কোন পদ্ধতি ব্যবহার করবেন?

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

ওহ এবং এটি ব্যবহারের mvপ্রয়োজন নেই rsync, cpসমাধানগুলি স্বাগত।

দ্রষ্টব্য: আমরা CentOS 5.5 চালাচ্ছি সুতরাং এটি আরও সাম্প্রতিক ... বৈশিষ্ট্য হওয়ার কারণে এটি সেখানে কাজ করে না কিনা তা আমাকে জানান


ইউপু দুপা সম্পর্কে কী করতে চাইবে?

@ আইইন পরিস্থিতির উপর নির্ভর করে? আমি একটি ওয়েবহোস্টে কাজ করি ... এটি সত্যিকারের উপর নির্ভর করে mvএবং আমরা যদি সংরক্ষণের বিষয়ে যত্ন করি ... এবং আমরা ইতিমধ্যে একটি ব্যাকআপ তৈরি করেছি কিনা তার উপর। এই প্রশ্নটি মোটামুটি উন্মুক্ত। আমি কেবল ভাল বিকল্পগুলির সন্ধান করছি, এবং এটি আপনাকে দংশন করতে পারে এবং কীভাবে সে সম্পর্কে একটি মন্তব্য হতে পারে।
xenoterracide

আমি ধরে নিলাম শেলটি হ্যান্ডল করার জন্য অনেকগুলি ফাইল আছে mv * ../বা mv -i * ../?
মাইকেল মরোজেক

@ মিশেল আমি নিশ্চিত যে এটির পরিবর্তিত হয় ... কিছু ক্ষেত্রে সম্ভবত না। কিছু ক্ষেত্রে হতে পারে। আমি যতটা সম্ভব আমার কাজের এনভির জন্য অনেকগুলি বিকল্প ধরার চেষ্টা করছি।
xenoterracide

উত্তর:


6

আমি পিতামাতার কাছ থেকে rsync ব্যবহার করার পরামর্শ দেব:

rsync -avPr -b --suffix='-original' child/* .

যা প্যারেন্টে বিদ্যমান নকল ফাইলগুলিকে ফাইল- অরিজিনাল-এ ব্যাকআপ করবে ।


আমি মনে করি -aতা বোঝায়-r
xenoterracide

@ xenoterracide - ঠিক আপনি 'r'
টোক

@ টোক কি অনুলিপিটি হার্ডলিঙ্ক হিসাবে করা সম্ভব? যাতে IO নষ্ট না করে। (পছন্দ -lকরুন cp)
xenoterracide

@ এক্সেনোটেরাকাসাইড - আপনি হার্ড লিঙ্কগুলি সংরক্ষণের জন্য আরএসসিএনসি এর জন্য -Hবা --hard-linksপতাকা ব্যবহার করতে পারেন ।
টোক

1
@ এক্সেনোটেরাকাসাইড - আপনি --link-dest=DIRএই আচরণটি অর্জন করতে পতাকাটি ব্যবহার করতে পারেন : rsync -avP --link-dest=/path/to/src /path/to/src/* /path/to/dest/যা ডিএসটি / এসআরসিআর এবং সিআরসি- র মধ্যে যে কোনও অপরিবর্তিত ফাইলগুলিতে লিঙ্ক হয়ে যাবে, এক্ষেত্রে সমস্ত ফাইল। সাধারণত আপনি যখন এই ডেটা যেমন অনুলিপি না করে ব্যাকআপ ফাইলগুলি পুনরায় লিঙ্ক করতে চান তখন এই পতাকাটি ব্যবহার করা দেখেন --link-dest=/most/recent/backup
টোক

4
cp -bal . ..

এটি বর্তমান ডিরেক্টরিতে থাকা সমস্ত ডিরেক্টরিকে উপরের ডিরেক্টরিতে অনুলিপি করবে, সমস্ত অনুমতি বজায় রাখবে, সম্ভব হলে IO হ্রাস করতে হার্ডলিঙ্কগুলি ব্যবহার করবে এবং নকলগুলিতে এটি ফাইলের নাম তৈরি করে ~

তারপর

rm -rf . ; cd .. ; rmdir <originaldir>;

সম্ভবত ফাইল ইস্যু প্রচুর সংখ্যায় চলে ... কিন্তু আরএসসিএন হিসাবে আইও নিবিড় নয়।
xenoterracide

2

এই উদাহরণে ফাইলগুলি '/ পিতামাতা / ওল্ড-ডির' থেকে '/ পিতামাতাকে' সরানো হবে:

cd /parent

rsync -av --progress old-dir/ .

rm -rf old-dir

RSSync নিয়ম অনুসারে এটি থেকে নতুন ফাইলগুলির সাথে ডুপগুলি প্রতিস্থাপন করবে old-dir


1

আপনি চেষ্টা করতে পারেন

find . -maxdepth 1 -print0 | xargs -I '{}' -r0 mv '{}' ..

যা ডুপ ফাইলগুলিকে ওভাররাইট করবে ..

আপনি যদি এমপি-ইউ '{}' ব্যবহার করতে পারেন তবে ডুপইন ওভাররাইট না করার জন্য .. একই বা আরও নতুন


পাইপ এক্সার্গসকে খুঁজে পাবে কেন? কেন +
xenoterracide

1
@ এক্সেনোটেরাকাসাইড - অভ্যাস এবং বহনযোগ্যতা (এটি একটি জিএনইউ এক্সটেনশন)। যে আমি এটা চেষ্টা করেছি এবং চিন্তা করতে পারে না কিভাবে দ্বিতীয় প্যারামিটারটি পাস উপরে ..থেকে mv '{}' +যেমন + + মাত্র শেষ যোগ কমান্ড।

@Iain + + POSIX হয় আমি আসলে বলা হয় পূর্বে গনুহ খোঁজ এটি পেতে দেরি হয়ে গেছে।
xenoterracide

আপনি ঠিক বলেছেন তবে আমি এখনও ব্যবহার করার কোনও উপায় অনুমান করতে পারি না

2
@ এক্সেনোটেরাকাইড: জিএনইউ কোর্টিলস সহ : -exec mv -t .. -- {} +. Portably: -exec sh -c 'mv -- "$@"' _ {} +
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

1

mv -i গন্তব্য বিদ্যমান থাকলে কেবলমাত্র অনুরোধ জানানো হয়।

yes n | mv -i …গন্তব্য ডিরেক্টরিতে বিদ্যমান না এমন সমস্ত ফাইল সরিয়ে দেয়। ফ্রিবিএসডি এবং ওএসএক্স এ আপনি এটিকে সংক্ষিপ্ত করতে পারেন mv -n …

মনে রাখবেন যে এগুলির কোনওটিই গন্তব্য ডিরেক্টরিতে একই নামের সাথে একটি ডিরেক্টরিটিকে যুক্ত নামের সাথে যুক্ত করে will


বর্তমান ডিরেক্টরি ডিরেক্টরিতে সমস্ত ফাইলের মধ্যে কীভাবে কাজ করা যায় তা একটি পৃথক সমস্যা। দুটি সমস্যা রয়েছে: সমস্ত ফাইল দখল ( *ডট ফাইল বাদ দেয়) এবং কমান্ড লাইনে না চলে। লিনাক্সে (বা আরও সাধারণভাবে জিএনইউ অনুসন্ধান এবং জিএনইউ কোর্টিলগুলি সহ):

find . -mindepth 1 -maxdepth 1 -exec mv -i -t .. -- {} +

জিএনইউ সহ তবে জিএনইউ কোর্টিলগুলি (বা পুরানো জিএনইউ কোর্টিল) নয়:

find . -mindepth 1 -maxdepth 1 -exec sh -c 'mv -i -- "$@" "$0"' .. {} +

Portably:

find . -name . -o -exec sh -c 'mv -i -- "$@" "$0"' .. {} -type d -prune

যথারীতি zsh জিনিসগুলি সহজ করে তোলে। এটি অভ্যন্তরীণভাবে কোনও কমান্ড লাইনের দৈর্ঘ্যের সীমাবদ্ধতা রাখে না, সুতরাং আপনি যদি এটির mvবিল্টিন ব্যবহার করেন তবে আপনাকে সে সম্পর্কে চিন্তা করার দরকার নেই। এবং আপনি এটি Dগ্লোব কোয়ালিফায়ার দিয়ে ডট ফাইলগুলি উপেক্ষা করবেন না তা বলতে পারেন । সীমাবদ্ধতা: এটি ফাইল সিস্টেমগুলিতে কাজ করে না (zsh 4.3.10 হিসাবে)।

zmodload zsh/files
mv -i -- *(D) ..

অনেক যুক্তি?
xenoterracide

0

আমি আমাদের এমএল উপর বললাম

mv * ..

স্পষ্টতই এটি খুব নিরাপদ নয় ... এটি জিনিসগুলিকে ওভাররাইট করবে। এটির সীমা থাকতে পারে যা আমি কখনই প্রবেশ করিনি।


2
আপনার যদি প্রচুর পরিমাণে ফাইল থাকে তবে আপনি সম্ভবত একটি 'যুক্তি তালিকা খুব দীর্ঘ ত্রুটি' পেয়ে যাবেন।

2
আপনার যদি এমন কোনও ফাইল নাম শুরু হয় যা এটি খারাপ কাজ করতে পারে -। এটি যার নাম দিয়ে ফাইল শুরু করবে না .
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

0

নীচে একটি অজগর টেম্পলেট যা আমি অতীতে ভাল প্রভাব ব্যবহার করেছি।

#!/usr/bin/env python
#
# Bart Kastermans, www.bartk.nl
#
# rename of collection of files in a directory
import os
import shutil

# only work on files whose name starts with a D
files = [filename for filename in os.listdir ("/Users/kasterma/Music/Audio Hijack/") if filename[0] =="D"]

for filename in files:
    shutil.move (filename, filename [:23] + ".mp3")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.