নিয়মিত এক্সপ্রেশন ব্যবহার না করে সিপি / এমভি ব্যবহার করে একাধিক ফাইল অনুলিপি / সরান


9

ধরুন আমার কাছে কিছু ফোল্ডার এবং কিছু ফোল্ডার রয়েছে (ফাইলগুলি কোনও ধরণের হতে পারে)। এবং আমি / ফাইলটি এবং ফোল্ডারগুলি mv/ cpকমান্ড ব্যবহার করে কিছু মুভ / অনুলিপি করতে চাই । কোনও উপায় আছে, যেমন আমি তাদের কয়েকটি এলোমেলোভাবে বেছে নিতে পারি, ঠিক যেমন আমরা সিটিআরএল কী ব্যবহার করে নির্বাচন করি এবং টার্মিনালটি ব্যবহার করে মুভ / অনুলিপি করি? আমি কোনও ওয়াইল্ডকার্ড বা নিয়মিত প্রকাশটি ব্যবহার করতে পারি না, কারণ আমি বিভিন্ন ধরণের ফাইল নির্বাচন করতে চাই এবং তাদের নামগুলিতে সামান্য পরিমাণে মিল রয়েছে।


3
আপনি আরও তথ্য সরবরাহ করতে চাইবেন। কি ধরনের মিল ফাইল আছে?
সের্গেই কোলোডিয়াজনি

2
এমনকি আপনি যদি নিয়মিত এক্সপ্রেশন বা ওয়াইল্ডকার্ড ব্যবহার না করতে পারেন তবে যুক্তিগুলি প্রসারিত করতে আপনি সম্ভবত মিল এবং ধনুর্বন্ধনীগুলির সুবিধা নিতে পারেন। বাশ যাইহোক, যদি আপনার নীচের উত্তরগুলির মতো ফাইল 1, ফাইল 2, ফাইল 3 থাকে তবে আপনি কেবল cp -t /dest/ file{1,2,3}বা ব্যাপ্তি ব্যবহার করতে পারেন cp -t /dest/ file{1..3}। এটি অ-সংখ্যাযুক্ত আরোগুলি এবং সংমিশ্রনের জন্যও কাজ করে, যেমন cp -t /dest/ f{ile,ly}.{csv,txt}মৃত্যুদন্ড কার্যকর করে cp -t /dest/ file.txt file.csv fly.txt fly.csv। পজিশনটি গুরুত্বপূর্ণ হলে ওভাররাইটিংয়ের বিষয়ে সাবধান থাকুন তবে আমি সেগুলিকে দরকারী মনে করি।
নিওপ্প্প

আপনার এটার দরকার কেন? আপনার বর্ণনা অনুসারে ফাইল ম্যানেজার ব্যবহার করছেন না কেন? শেল সরঞ্জামগুলি যতটা সম্ভব কম अस्पष्ट হতে চেষ্টা করে।
ব্রায়াম

আমরা সবাই জানি আমরা সিটিটিএল কী ব্যবহার করে কোনও ফোল্ডারের নীচে এলোমেলো ফাইল এবং ফোল্ডার নির্বাচন করতে পারি can আমি কেবল জানতে চাই যে লিনাক্স টার্মিনালটি ব্যবহার করার সময় আমরা একই জাতীয় কৌশলটি প্রয়োগ করতে পারি কিনা
মখিলএমসি

উত্তর:


11

আপনি স্থানান্তর করতে চান অথবা একই নির্দেশিকাতে সব ফাইল কপি থাকে, তাহলে আপনি ব্যবহার করতে পারেন -tবিকল্প cpবা mv, কিন্তু এই অর্থ আপনি টাইপ / একটি আর্গুমেন্ট হিসাবে একে ফাইলের নাম সরবরাহ আছে। এটি আপনার পছন্দমতো আর্গুমেন্টের সাথে নিম্নোক্ত পদ্ধতিতে কাজ করে:

cp -t /destination/directory/ file1 file2 file3

অথবা

mv -t /destination/directory/ file1 file2 file3

এটি বেশ শ্রমসাধ্য, তবে ফাইলের নাম টাইপ করা বাশের ট্যাব সমাপ্তি ব্যবহার করে আরও সহজ করা যায় ।

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

এটি প্রতিটি ফাইল চেক করে এবং আপনি সেই ফাইলটি অনুলিপি করতে চান কিনা তা জিজ্ঞাসা করে। ফাইল নির্বাচনের শেষে এটি নির্বাচিত ফাইলগুলির একটি তালিকা দেখায় এবং জিজ্ঞাসা করে যে আপনি সেগুলি গন্তব্য ডিরেক্টরিতে অনুলিপি করতে চান:

#!/bin/bash
directory=$1
destination=$2
selected_files=()
for f in ${directory}/*
do
  if [[ -f $f ]]
  then
    while true
    do
      read -p "Would you like to copy ${f}? y/n: " choice
      case $choice in
        y|Y) selected_files+=("$f");
             break ;;
        n|N) echo "${f} will not be copied.";
             break ;;
        *) echo "Invalid choice, enter y/n: " ;;
      esac
    done
  fi
done
echo "The following files will be copied to ${destination}."
for file in "${selected_files[@]}"
do
  echo "$file"
done
while true
do
  read -p "Are these the correct files? y/n: " confirm
  case $confirm in
    y|Y) break ;;
    n|N) echo "Exiting filechooser"; exit 1 ;;
    *) echo "Invalid choice, enter y/n: " ;;
  esac
done
cp -t "$destination" "${selected_files[@]}"

এই স্ক্রিপ্টটিতে গন্তব্য ডিরেক্টরি উপস্থিত রয়েছে কিনা, বা আপনি সঠিক যুক্তিগুলি ইনপুট করেছেন কিনা তা পরীক্ষা করার ক্ষেত্রে কোনও ত্রুটি নেই বলে সতর্ক করে দেওয়া উচিত।


4

এখানে এমন একটি স্ক্রিপ্ট রয়েছে যা অনুলিপি করা ফাইল / ডিরেক্টরিগুলির একটি এলোমেলো সেট নির্বাচন করে। এটি স্বেচ্ছাসেবী ফাইলের নামগুলি এমনকি নিউলাইন এবং স্পেসগুলি ধারণ করেও ডিল করতে পারে। স্ক্রিপ্টটিকে সংরক্ষণ করুন ~/bin/randomCopy.sh(এক্সিকিউটেবল chmod a+x ~/bin/randomCopy.sh) ( এবং তৈরি করুন) এবং তারপরে এটি চালান, উত্স ডিরেক্টরিটি প্রথম আর্গুমেন্ট হিসাবে, দ্বিতীয় হিসাবে লক্ষ্য ডিরেক্টরি এবং ফাইল / ডায়ার সংখ্যা (স্ক্রিপ্ট ফাইল এবং ডিরেক্টরিগুলির মধ্যে পার্থক্য করে না, যেমন আপনি অনুরোধ করেছেন) অনুলিপি করা হবে। উদাহরণস্বরূপ, এ থেকে 5 টি এলোমেলো ফাইল বা ডিরেক্টরিগুলি অনুলিপি /fooকরতে /bar:

randomCopy.sh /foo /bar 5

এই পান্ডুলিপি:

#!/bin/bash

if [ $# -lt 3 ]; then
        cat<<EOF 
This script needs at least 3 arguments: the source directory, the
target directory and the number of files/dirs to be copied. For example:

    $0 /from /to 5

EOF
        exit
fi 

sourceDir="$1"
targetDir="$2"
number="$3"

## Collect all file and directory names. The globstar
## bash option lets ** match all files and directories
## recursively
shopt -s globstar
dirsAndFiles=( ** )

## Get $num random numbers from 0 until
## the number of files and dirs found. This
## will let us take a random selection.
limit=$((${#dirsAndFiles[@]}-1))  
numbers=$(shuf -i 0-"$limit" -n "$number")

for num in $numbers; do
    cp -rv "${dirsAndFiles[$num]}" "$targetDir"
done

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


0

হয়তো মিডনাইট কমান্ডারের মতো কিছু ব্যবহার করার চেষ্টা করবেন ? এটি একটি কনসোল অ্যাপ্লিকেশন যা গ্রাফিকাল নটিলাস ফাইল ম্যানেজারকে অনুরূপ বৈশিষ্ট্যগুলি সরবরাহ করে।


0

সম্প্রতি আমি xargs ব্যবহার করে এই সমস্যার কার্যকর সমাধান খুঁজে পেয়েছি।

`xargs cp
 file1
 file2
 .....
 .....
 <path of the destination folder>`

তারপরে টাইপ করুন Ctrl + C। এটি নিশ্চিতভাবে কাজ করবে। আমি এটি পরীক্ষা করেছি। এই পদ্ধতি দ্বারা আমরা ফাইলগুলি ঠিক Ctrlগ্রাফিক্স মোডে বোতাম ব্যবহার করার মতো নির্বাচন করতে পারি এবং অনুলিপি / সরানো / অপসারণ করতে পারি।

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