একটি নির্দিষ্ট ফাইলযুক্ত সমস্ত ফোল্ডার কীভাবে কপি করবেন


17

আমি কেবল আমার এফএলসি সংগীত ফোল্ডারগুলিকে ব্যাকআপ করতে চাই। ফোল্ডারগুলির মধ্যে এফএলএসি ফাইলগুলি যেমন নীস্ট করা যায়:

AlbumName/
├── Files/
│   ├── someSong01.flac
│   ├── someSong02.flac
├── Covers/
│   ├── someCover01.jpg
│   └── someCover02.jpg

আমি কীভাবে সমস্ত অ্যালবামনামের ফোল্ডারগুলিকে তাদের সংশ্লিষ্ট কাঠামো এবং সামগ্রীতে অন্তত একটি FLAC ফাইলের ভিতরে কোথাও অন্তর্ভুক্ত করব (আমি এটি ধরে নেওয়ার পক্ষে যথেষ্ট মনে করব: সংগীতটি FLAC ফর্ম্যাটে রয়েছে)

সম্পাদনা: এফএলএসি ফাইলগুলি নেস্ট করা যেতে পারে; সুতরাং আমি থাকতে পারি:

AlbumName2/
├── someSong01.flac
├── someSong02.flac
├── Covers/
│   ├── someCover01.jpg
|   └── someCover02.jpg

এবং আমি এই ফোল্ডারগুলি কেবল তাদের এফএলসি ফাইলই নয়, সমস্ত বিষয়বস্তু দিয়ে অনুলিপি করতে এবং অন্য ডিরেক্টরিতে আটকানো চাই।

সুতরাং আমি যদি আছে

AlbumName3/
├── someSong01.mp3
├── someSong02.mp3
├── Covers/
│   ├── someCover01.jpg
|   └── someHiddenSong.flac

এবং

AlbumName4/
├── Files/
│   ├── someSong01.mp3
│   ├── someSong02.mp3
├── Covers/
│   ├── someCover01.jpg
│   └── someCover02.jpg

আমি আবার অন্য ডিরেক্টরি অ্যালবামনাম, অ্যালবামনাম 2 এবং অ্যালবামনাম 3 তে অবিশ্বাস্যভাবে সিপি করতে চাই তবে অ্যালবামনাম 4 নয়

সম্পাদনা: উত্তরের কোনও উত্তরই আমি যা চাইছিলাম তা সত্যিই করছিল না, তাই আমি এরকম কিছু ব্যবহার করে শেষ করেছি:

 find -mindepth 2 -name '*.flac' -exec dirname {} \; | awk -F "/" '{print $2}' | sort -u | while read -r dirname; do cp -r "$dirname" "backup/"; done

মূলত আমি সমস্ত ফ্ল্যাক ফাইল তালিকাভুক্ত করি, আমি জঞ্জাল ব্যবহার করে মূল ফোল্ডারটি পুনরুদ্ধার করি, আমি সদৃশগুলি মুছি এবং আমি যা চাই তা করি


ব্যাকআপ কোথায়, আপনার গন্তব্য কি?
জর্জ উদোসেন

কমপক্ষে একটি ফ্ল্যাক ফাইল থাকা কেবলমাত্র ফ্ল্যাক ফাইলগুলিই অনুলিপি করা বা পুরো ফোল্ডারগুলি রাখা দরকার?
কেউ কিছু

@ নোবডি ফোল্ডার: " আমি কীভাবে সমস্ত অ্যালবামনামের ফোল্ডারগুলিকে তাদের সংশ্লিষ্ট কাঠামো এবং সামগ্রীতে কমপক্ষে একটি
এফএলসি

উত্তর:


19

আরএসসিএনসি ব্যবহার করা একটি বিকল্প যা কেবল ফ্ল্যাক ফাইলগুলি অনুলিপি করে এবং ডিরেক্টরি কাঠামো সংরক্ষণ করে:

rsync -avzm --include=*/ --include=*.flac --exclude=* albums/ backup/
  • একটি সংরক্ষণাগার
  • v verbose
  • স্থানান্তরকালে z কমপ্রেস (একই কম্পিউটারে অনুলিপি কার্যকর নাও হতে পারে)
  • আমি খালি ডায়ার ছাঁটাই
  • প্রথম সমস্ত ডিরেক্টরি অন্তর্ভুক্ত অন্তর্ভুক্ত
  • দ্বিতীয়টি flac ফাইল অন্তর্ভুক্ত অন্তর্ভুক্ত
  • শেষ বাদে অন্য সমস্ত ফাইল বাদ দেয়

সত্যি? আমি বুঝতে পারি, তিনি ডিরেক্টরি কাঠামো সংরক্ষণ করতে চান wants তিনি বলেছেন: "আমি কীভাবে সমস্ত অ্যালবামনামের ফোল্ডারগুলিকে তাদের সংশ্লিষ্ট কাঠামো এবং সামগ্রীর সাহায্যে অনুলিপি করব এবং সরব ..."।
কেউ নয়

2
আচ্ছা বুঝলাম. আমি নিশ্চিত না. কমপক্ষে একটি ফ্ল্যাক ফাইল থাকা কেবলমাত্র ফ্ল্যাক ফাইলগুলিই অনুলিপি করা বা পুরো ফোল্ডারগুলি রাখা দরকার?
কেউ কিছু

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

9

হাই আমার বন্ধু আপনি ব্যবহার করতে পারেন

mkdir newdirectory
cp -r --parents */*.flac newdirectory/

2
এর --parentsআগে কখনও ভালো লাগেনি !
জর্জ উদোসেন

4
দয়া করে এটি ব্যাখ্যা করুন */*.flac! cp -r --parents AlbumName/ newdirectory/যথেষ্ট হবে না?
জর্জ উদোসেন

3
প্রশ্ন থেকে, মনে হচ্ছে ফ্ল্যাকগুলি নেস্টেড ডিরেক্টরিতে থাকতে পারে বা নাও থাকতে পারে, তাই আমি গ্লোবস্টার ( shopt -s globstar) সক্ষম করার পরামর্শ দেব , তারপরে গ্লোবটির **/*.flacজন্য ব্যবহার করব । ডাবল-স্টার শূন্য বা আরও বেশি ডিরেক্টরিতে মিলবে।
wjandrea

আপনি ঠিক ঠিক ওজান্দ্রিয়া, আমার প্রশ্নটি সম্পাদনা করতে দিন যাতে সবাই বুঝতে পারে
ফ্রিক্যাডেল

5

সুন্দর উত্তর

আমি আরও একটি উপায় যোগ করতে চান, আপনি একটি সমন্বয় ব্যবহার করতে পারেন খোঁজ এবং cpio

find . -name "*.flac" -print0|cpio --null -pdm destination/

ব্যাখ্যা:

GNU find searches the directory tree rooted at each given file name by evaluating the given expression from left to right, according to the rules of precedence (see Operators), until the outcome is known (the left-hand side is false for AND operations, true for OR), at which point find moves on to the next file name.

GNU cpio is a tool for creating and extracting archives, or copying files from one place to another. It handles a number of cpio formats as well as reading and writing tar files.

এখানে 3 সিপিও মোড রয়েছে:

  • অনুলিপি মোড: In copy-out mode, cpio copies files into an archive. It reads a list of filenames, one per line, on the standard input, and writes the archive onto the standard output.

  • অনুলিপি মোড: In copy-in mode, cpio copies files out of an archive or lists the archive contents. It reads the archive from the standard input.

  • অনুলিপি-পাস মোড: In copy-pass mode, cpio copies files from one directory tree to another, combining the copy-out and copy-in steps without actually using an archive. It reads the list of files to copy from the standard input; the directory into which it will copy them is given as a non-option argument.

এখানে, আমরা কপি-পাস মোড ব্যবহার করছি।

  • উপরের কমান্ডে ব্যবহৃত বিকল্পগুলি:

অনুসন্ধান:

  • -নম -> ফাইলের নাম বা পুরো নাম লেখার পরিবর্তে রেজেেক্স ব্যবহার করুন

cpio:

  • '-ম, - সংরক্ষণ-পরিবর্তন সময়' Retain previous file modification times when creating files.
  • '-P, - পাস-থ্রু' Run in copy-pass mode. see ``Copy-pass mode``.
  • '-ডি, - মেক-ডিরেক্টরি' Create leading directories where needed.'
  • --quiet' কপি করা ব্লকের সংখ্যা মুদ্রণ করবেন না `

New options are the "-print0" available with GNU find, combined with the "--null" option of cpio. These two options act together to send file names between find and cpio, even if special characters are embedded in the file names.

rsyncডিরেক্টরি কাঠামোর সাহায্যে ফাইলগুলি সন্ধান এবং অনুলিপি করতে একটি শেল স্ক্রিপ্ট ব্যবহার বা লিখতেও পারে।

Rsync ব্যাখ্যার জন্য, দয়া করে উপরের উত্তরগুলি দেখুন।


2
আদেশগুলির ব্যাখ্যা এবং আপনার প্রস্তাবিত বিকল্পগুলি অন্তর্ভুক্ত করে আপনি নিজের উত্তরটি উন্নত করতে পারেন। - পর্যালোচনা থেকে
জে। স্টারনেস

হ্যাঁ, ঠিক আছে! আপনার নিখুঁত পরামর্শের জন্য আপনাকে ধন্যবাদ।
বিএসডবয়

4

উত্তর 1: আপনি findএকই জন্য কমান্ড ব্যবহার করতে পারেন ।

mkdir newDir && find AlbumName/ -iname "*.flac" -exec cp --parents "{}" newDir/ \;

Explaination:

mkdirনতুন ডিরেক্টরি তৈরি করে। findকমান্ড ফোল্ডারে *.flacঅবস্থিত ফাইলগুলি সন্ধান করে AlbumNameexecকমান্ড cpপ্রতিটি ফাইলনাম findফিরে পেয়েছে তার কমান্ড কার্যকর করে ।

2 উত্তর: এছাড়াও আপনি ব্যবহার করতে পারেন findসঙ্গে কমান্ড xargsহিসাবে ভাল

mkdir newDir && find AlbumName/ -iname "*.flac" | xargs -I{} cp --parents {} newDir/

আরও তথ্য: সন্ধান করুন , xargs


1
find | xargsস্থানগুলির সাথে ফাইলের নামগুলি ভেঙ্গে যাবে, পরিবর্তে ব্যবহার find -print0 | xargs -0করুন।
মিষ্টান্ন

আমি 1 2.flacফাইলটির সাথে চেষ্টা করেছি যার ফাইলনামে স্থান রয়েছে। আপনি কি দয়া করে আমাকে ফাইলের নামটি জানাতে পারেন যার উপর find | xargsব্যর্থ হয়?
mf_starboi_8041

উদাহরণস্বরূপ এখানে দেখুন
21:25

আমি জানি না তবে আমি দীর্ঘ নাম দিয়ে ফাইলটি অনুলিপি করতে সক্ষম হচ্ছি যা এতে ব্যবহার না করে এতে স্থান রয়েছেfind -print0 | xargs -0
mf_starboi_8041

ব্যবহার করে দেখুন touch "a space" && find . | xargs ls
মিষ্টান্ন

0

আমার মিউজিক লাইব্রেরির জন্য একই সমস্যাটি সমাধান করার জন্য কেবল এটি ছিল এবং নীচের রূপান্তরিত স্ক্রিপ্টটি ব্যবহার করে এটি সমাধান করে। আমি এটি সম্পূর্ণরূপে ভেরিয়েবলগুলির সাথে সম্পূর্ণ ইঞ্জিনিয়ার করিনি, কারণ আমি কেবল এটি একবার ব্যবহার করার ইচ্ছা করি :)।

স্ক্রিপ্টটি অন্য সকল ফাইল এবং উপ-ডিরেক্টরি সহ ফ্ল্যাক ফাইলযুক্ত প্রতিটি ডিরেক্টরিকে আরএসইএনসি ব্যবহার করে একটি নতুন অবস্থানে নিয়ে যায়। rsync আপনাকে স্ক্রিপ্টটি পুনরায় শুরু করার অনুমতি দেয় যদি এটি প্রক্রিয়া চলাকালীন বন্ধ হয়ে যায়।

আমার গ্রন্থাগার কাঠামো:

library
|-artist
  |- album 1 (mp3)
  |- album 2 (flac)

নতুন গ্রন্থাগার কাঠামো:

library
|-artist
  |- album 1 (mp3)

library-lossless
|-artist
  |- album 2 (flac)

(1) নীচের শেল স্ক্রিপ্টটি উত্সস্থল গন্তব্যে শুরু করুন (আপনার পছন্দসই ডিরেক্টরিতে টার্গেট প্রতিস্থাপন করুন - আমি কেবল পরম পথটি ব্যবহার করেছি)

সারি 1: ফ্ল্যাক ফাইল এবং পাইপ (|) সমেত সমস্ত ডিরেক্টরি সন্ধান করুন যা সারণি
সারি 2 তে সাজান : ডুপ্লিকেটগুলি সর্ট করুন এবং পাইপ যে তালিকাটি ডো লুপ
সারি 3 এ তালিকাভুক্ত করুন : প্রতিটি ডিরেক্টরিতে
সারি 4 করুন: প্রক্রিয়া
সারি 5 তে ডিরেক্টরিটি দেখান : টার্গেট ডিরেক্টরিতে আরএসইএনসি প্লাস উত্স সরান এবং কাঠামো সংরক্ষণের কাঠামো (-আর) লক্ষ্য
সারি row: খালি ডিরেক্টরিটি সরান (কেবল আরএসসিএনসি ফাইলগুলি সরিয়ে দেয়)

find . -type f -name \*.flac -printf "%h\n" | 
sort -u | 
while read -r dirname; do
    echo $dirname
    rsync -azvm -R --remove-source-files "${dirname}" TARGET
    find "${dirname}" -type d -delete
done

(২) স্ক্রিপ্টটি সফলভাবে কার্যকর করার পরে (1) আপনি উত্স ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি প্রয়োগ করতে পারেন

find . -depth -type d -empty -delete

এই কমান্ডটি স্ক্রিপ্টের মধ্যে মোছা হয়নি এমন সমস্ত খালি ডিরেক্টরি মুছে ফেলে । অর্থাত "শিল্পী" ডিরেক্টরি, যেখানে সমস্ত সাবফোল্ডার / অ্যালবামে ফ্ল্যাক ফাইল অন্তর্ভুক্ত থাকে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.