রিমোট সিস্টেমে একটি উত্তরযোগ্য টাস্ক ব্যবহার করে কোনও ফাইল কীভাবে সরানো / নামকরণ করতে হয়


202

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


আপনি কমান্ড / শেল ব্যবহার করতে চান না কেন?
নিক আরবান

4
কেবলমাত্র উল্লিখিত কাজগুলি ব্যবহার না করে কোনও উপায় আছে কিনা তা জানতে চেয়েছিলেন। মনে হচ্ছে এই মুহূর্তে অন্য কোনও উপায় নেই।
খ্রিস্টান বেরেন্ড্ট

1
আপনি কেন এটি অনুলিপি করার পরিবর্তে বিশেষভাবে স্থানান্তর করতে চান? এটিকে এক-অফ-অ্যাকশনের মতো মনে হয় না, বরং আদর্শ-পদাশক্তি -র-ব্যবস্থাটি-ধরণের-ধরণের ধরণের পদক্ষেপ নিশ্চিত করা than
নিক আরবান

2
আমার কাছে একটি আরপিএম প্যাকেজে অন্তর্ভুক্ত একটি নমুনা কনফিগারেশন ফাইল রয়েছে এবং আমি এই নমুনা কনফিগারেশন ফাইলটি সরাতে চাই।
খ্রিস্টান বেরেন্ড্ট

1
এই মুহুর্তে আমি ফাইলটি উল্লেখ করতে একটি সিমিলিংক ব্যবহার করছি। Get_url ব্যবহার করা আমার পক্ষে কোনও বিকল্প নয় কারণ সিস্টেমটি ইন্টারনেটে পৌঁছতে পারে না।
খ্রিস্টান বেরেন্ড্ট

উত্তর:


201

ফাইল মডিউল দূরবর্তী সিস্টেমে ফাইলগুলি অনুলিপি করে না। Src পরামিতি কেবলমাত্র ফাইল মডিউল দ্বারা ব্যবহৃত হয় যখন কোনও ফাইলে একটি সিমলিংক তৈরি করা হয়।

আপনি যদি কোনও দূরবর্তী সিস্টেমে কোনও ফাইল পুরোপুরি সরিয়ে নিতে / নাম পরিবর্তন করতে চান তবে আপনার সেরা বেট হ'ল কমান্ড মডিউলটি কেবলমাত্র উপযুক্ত কমান্ডটি চাওয়ার জন্য:

- name: Move foo to bar
  command: mv /path/to/foo /path/to/bar

আপনি যদি অভিনবতা পেতে চান তবে আপনি প্রথমে স্টু মডিউলটি ব্যবহার করতে পারবেন যে foo আসলে রয়েছে:

- name: stat foo
  stat: path=/path/to/foo
  register: foo_stat

- name: Move foo to bar
  command: mv /path/to/foo /path/to/bar
  when: foo_stat.stat.exists

3
কমান্ড মডিউলটি ব্যবহার না করে, আপনার নিজস্ব পছন্দমতো মডিউলটি লেখার জন্য কেবলমাত্র অন্য পছন্দ choice
ব্রুস পি

2
সঠিক উত্তর হিসাবে ট্যাগ করা কারণ এটি দূরবর্তী ফাইলগুলি অনুলিপি করার বর্তমান উপায়।
খ্রিস্টান বেরেন্ড্ট

11
আপনি লাফানোর আগে দেখার বিষয়ে: মডিউলটির removesবিকল্পটি command( এখানে ডকুমেন্টেড ) ব্যবহার না করার কোনও কারণ আছে কি ? দেখে মনে হচ্ছে যে বিকল্পটি প্রথমে উত্তরযোগ্য চেক করবে।
জিম উইটশে

2
হ্যান্ডলারকে অবহিত করার জন্য উত্তরীয় ট্র্যাকগুলি পরিবর্তন করে, যা এই সমাধানটিকে সাবপটিমাল করে তোলে।
বোহ

3
আপনি যদি ব্যবহার করেন removes: /path/to/fooএবং ব্যবহার করেন তবে আপনাকে ম্যানুয়ালি ফাইলটির অস্তিত্ব পরীক্ষা করতে হবে না creates: /path/to/bar। @ ফন্যান্ট ইতিমধ্যে অন্য উত্তরের মন্তব্য হিসাবে এটি উল্লেখ করেছেন, তবে এটি যেহেতু গৃহীত উত্তর তাই আমি আবার এটি উল্লেখ করতে চাই।
মাইকেল ট্রোজানেক

218

সংস্করণ 2.0 থেকে , অনুলিপি মডিউলটিতে আপনি remote_srcপ্যারামিটার ব্যবহার করতে পারেন ।

যদি True এটা src জন্য দূরবর্তী / লক্ষ্য মেশিনে যাব।

- name: Copy files from foo to bar
  copy: remote_src=True src=/path/to/foo dest=/path/to/bar

আপনি যদি ফাইলটি সরাতে চান তবে আপনার ফাইল মডিউল সহ পুরানো ফাইলটি মুছতে হবে

- name: Remove old files foo
  file: path=/path/to/foo state=absent

সংস্করণ ২.৮ থেকে অনুলিপি মডিউল remote_src পুনরাবৃত্তির অনুলিপি সমর্থন করে।


29
ছোট মন্তব্য: "বর্তমানে রিমোট_সিআরসি পুনরাবৃত্তির অনুলিপি সমর্থন করে না" " উত্তরযোগ্য মডিউল ডক থেকে নেওয়া। সুতরাং আপনি যদি পুনরাবৃত্তভাবে অনুলিপি করতে চান তবে আপনার এখনও শেল / কমান্ড মডিউলটি দরকার।
ক্লাস

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

19
@ আলেক্স আমি যা বলছি তা হ'ল সঠিক উপায় হতে পারে না। আমি 50 টিরও বেশি উত্থানের বিরুদ্ধে চলে যাচ্ছি তবে এটি পাগল। আরেকটি সমস্যা: অনুমতি এবং অন্যান্য বৈশিষ্ট্য বজায় রাখা হয় না। আরেকটি: অনুলিপি চলাকালীন যদি ফাইলটি পরিবর্তন করা হয় ?
mlissner

2
@ হামিশ ডাউনার এবং মিলিসনার আমি বলিনি যে এটি আপনার সমস্ত প্রয়োজনের জন্য সেরা সমাধান। এছাড়াও আমি লিখেছিলাম যে আপনি যদি অনেকগুলি ফাইল অনুলিপি করতে চান তবে আপনার কপি মডিউলটি ব্যবহার করা উচিত নয়। "আমি কমান্ড / শেল কার্যগুলি ব্যবহার করতে চাই না" প্রশ্নটি পড়ুন।
অ্যালেক্স

7
@ অ্যালেক্স এটি আদর্শ সঞ্চারিত ফাইলগুলি সম্পর্কে প্রশ্নে দ্বিতীয় সর্বোচ্চ ভোট দেওয়া উত্তর। প্রশ্নটি অনুলিপি নিয়ে নয়। অনুলিপি করার পরিবর্তে অনুলিপি করার ক্ষেত্রে অনেক সমস্যা রয়েছে তাই এই উত্তরটি ভুল। সুতরাং এটি একটি ডাউনভোট পায়। এসও এর শিষ্টাচারটি ডাউনভোটগুলি ব্যাখ্যা করা। অন্য কোথাও উল্লিখিত হিসাবে, এখন পর্যন্ত সেরা বিকল্পটি হ'লcommand: mv /path/to/foo /path/to/bar creates=/path/to/bar removes=/path/to/foo
অ্যালেক ওয়েঞ্জোস্কি

106

কমান্ড মডিউলটিতে ক্রিয়েস বিকল্পটি আমি দরকারী খুঁজে পেয়েছি। এটি সম্পর্কে:

- name: Move foo to bar
  command: creates="path/to/bar" mv /path/to/foo /path/to/bar

ব্রুস পি পরামর্শ মতো স্ট্যাটাস ব্যবহার করে আমি 2 টি টাস্ক অ্যাপ্রোচ করতাম। এখন আমি ক্রিয়েটগুলির সাথে একটি কাজ হিসাবে এটি করি। আমি মনে করি এটি অনেক পরিষ্কার।


60
বা আরও ভাল: command: mv /path/to/foo /path/to/bar creates=/path/to/bar removes=/path/to/foo
Fonant

8

আর একটি অপশন যা আমার পক্ষে ভাল কাজ করেছে তা হ'ল সিঙ্ক্রোনাইজ মডিউলটি । তারপরে ফাইল মডিউলটি ব্যবহার করে মূল ডিরেক্টরিটি সরান।

এখানে ডক্স থেকে একটি উদাহরণ দেওয়া হয়েছে:

- synchronize:
    src: /first/absolute/path
    dest: /second/absolute/path
    archive: yes
  delegate_to: "{{ inventory_hostname }}"

এটি প্রতিটি ক্ষেত্রে স্থানীয়ভাবে কাজ করে না কারণ destডিরেক্টরি একই মেশিনে থাকা সত্ত্বেও এসএসএইচের মাধ্যমে অ্যাক্সেস করা হয়।
কার্ল রিখটার

5

এটি অর্জনের আরেকটি উপায় হ'ল এটি ব্যবহার fileকরা state: hard

আমি কাজ করতে পেল এটি একটি উদাহরণ:

- name: Link source file to another destination
  file:
    src: /path/to/source/file
    path: /target/path/of/file
    state: hard

যদিও শুধুমাত্র লোকালহোস্টে (ওএসএক্স) পরীক্ষিত, তবে এটি লিনাক্সেও কাজ করা উচিত। আমি উইন্ডোজের জন্য বলতে পারি না।

নোট করুন যে পরম পাথ প্রয়োজন। অন্যথায় এটি আমার লিঙ্কটি তৈরি করতে দেয় না। এছাড়াও আপনি ফাইল সিস্টেমগুলি অতিক্রম করতে পারবেন না, সুতরাং যে কোনও মাউন্ট মিডিয়াতে কাজ করা ব্যর্থ হতে পারে।

হার্ডলিঙ্কটি সরানোর মতোই অনুরূপ, যদি আপনি পরে উত্স ফাইলটি সরিয়ে থাকেন:

- name: Remove old file
  file:
    path: /path/to/source/file
    state: absent

আরেকটি সুবিধা হ'ল আপনি যখন কোনও নাটকের মাঝামাঝি থাকেন তখন পরিবর্তনগুলি বজায় থাকে। সুতরাং কেউ যদি উত্স পরিবর্তন করে তবে কোনও পরিবর্তন লক্ষ্য ফাইলটিতে প্রতিফলিত হয়।

এর মাধ্যমে আপনি কোনও ফাইলের লিঙ্কের সংখ্যা যাচাই করতে পারেন ls -l। হার্ডলিঙ্কগুলির সংখ্যা মোডের পাশে প্রদর্শিত হয় (যেমন rwxr-xr-x 2, যখন কোনও ফাইলে 2 লিঙ্ক থাকে)।


2
দুর্ভাগ্যক্রমে, এটি একটি ডিরেক্টরিতে কাজ করবে না, কারণ হার্ড লিঙ্কগুলি ডিরেক্টরিগুলির জন্য অনুমোদিত নয় ((
ড্রিউ

1
এই উত্তরটি লক্ষ্য সিস্টেম সম্পর্কে একটি ধারণা তৈরি করে, বিশেষত src এবং গতিপথ উভয়ই একই পার্টিশনে রয়েছে। এটি সত্য নাও হতে পারে এবং তাই এই উত্তরটি ব্যবহার করা উচিত নয়।
মিক্কি

4

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

টমসের মতো যদি আপনার আগ্রহটি কেবল তখনই সরানো হয় যা ফাইলটি ইতিমধ্যে বিদ্যমান না থাকে তবে আমি মনে করি আমাদের এখনও ব্রুসের চেকটি মিশ্রণে একীকরণ করা উচিত:

- name: stat foo
  stat: path=/path/to/foo
  register: foo_stat

- name: Move foo to bar
  command: creates="path/to/bar" mv /path/to/foo /path/to/bar
  when: foo_stat.stat.exists

3

এটি আমার পক্ষে এটি কাজ করার উপায়:

  Tasks:
  - name: checking if the file 1 exists
     stat:      
      path: /path/to/foo abc.xts
     register: stat_result

  - name: moving file 1
    command: mv /path/to/foo abc.xts /tmp
    when: stat_result.stat.exists == True

উপরের প্লেবুকটি টিএমপি ফোল্ডারে ফাইল স্থানান্তরিত করার আগে ফাইল abc.xts উপস্থিত কিনা তা পরীক্ষা করবে।


3
ব্যবহার করার দরকার নেই when: stat_result.stat.exists == True। শুধু ব্যবহার when: stat_result.stat.existsযথেষ্ট যথেষ্ট।
কুট্টুমিয়াহ

আমি সাধারণত == Trueকারণটি ব্যবহার করি কারণ যখন ফাইলটি পাওয়া যায় না বা থাকে তখন আমি সবসময় কিছু না কিছু করি == False
এডুপ্রাদো

মডিউল অফিশিয়াল ডকুমেন্টেশন পৃষ্ঠা অনুযায়ীstat exists সম্পত্তি একটি booleanমান দেয়। সুতরাং, যদি আপনি কেবল when: stat_result.stat.existsএই ফাইলটি উপস্থিত থাকেন তবে এটি শর্তটি পূরণ করবে যদি এটি একই রকম হয় when: stat_result.stat.exists == Trueতবে আরও পাঠ্য এবং অপ্রয়োজনীয় শর্তাধীন চেক সহ।
কুট্টুমিয়াহ

0

এটি ওভারকিলের মতো মনে হতে পারে তবে আপনি যদি কমান্ড মডিউলটি ব্যবহার করা এড়াতে চান (যা আমি করি কারণ এটি কমান্ড ব্যবহার করা আদর্শ নয়) আপনি অনুলিপি এবং অনার্ক্রাইভের সংমিশ্রণটি ব্যবহার করতে পারেন।

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


0

আপনি এটি দ্বারা এটি করতে পারেন -

অ্যাডহক কমান্ড ব্যবহার করা হচ্ছে

ansible all -m command -a" mv /path/to/foo /path/to/bar"

অথবা আপনি যদি প্লেবুক ব্যবহার করে এটি করতে চান তবে আপনি

- name: Move File foo to destination bar
  command: mv /path/to/foo /path/to/bar

0

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

main.yml

- name: created destination directory
  file:
    path: /path/to/directory
    state: directory
    mode: '0750'
- include_tasks: move.yml
  loop:
    - file1
    - file2
    - file3

move.yml

- name: stat the file
  stat:
    path: {{ item }}
  register: my_file

- name: hard link the file into directory
  file:
    src: /original/path/to/{{ item }}
    dest: /path/to/directory/{{ item }}
    state: hard
  when: my_file.stat.exists

- name: Delete the original file
  file:
    path: /original/path/to/{{ item }}
    state: absent
  when: my_file.stat.exists

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


0

উইন্ডোজে: - name: Move old folder to backup win_command: "cmd.exe /c move /Y {{ sourcePath }} {{ destinationFolderPath }}"

ব্যবহারের নামান্তর করতে পুনঃনামকরণ বা Ren বদলে কমান্ড

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