انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: درخواست shell script  (دفعات بازدید: 2280 بار)

0 کاربر و 3 مهمان درحال مشاهده موضوع.

آفلاین anishtain4

  • Newbie
  • *
  • ارسال: 15
درخواست shell script
« : 31 تیر 1391، 08:57 ق‌ظ »
سلام دوستان
من یه تعداد زیادی فایل دارم ( در حد 300 تا)
این فایل ها دو دسته هستن، یه سری با اسامی اصلی، و فایل های تکمیلی که همون اسم اصلی رو دارن و آخرشون AS نوشته شده. مشکل من اینه که اینا کنار هم نیستن. فایل های اصلی همشون تو یه فولدر هستن، و فایل های تکمیلی تو یه فولدر دیگه اما ساختار فولدرها یک شکل نیست. از دوستان کسی می تونه یه شل اسکریپت بنویسه که فایل های تکمیلی رو کپی کنه کنار اصلیشون؟

آفلاین سلمان م.

  • ناظر انجمن
  • *
  • ارسال: 4106
  • جنسیت : پسر
  • GNU Operating System - سیستم عامل گنو
پاسخ : درخواست shell script
« پاسخ #1 : 31 تیر 1391، 09:06 ق‌ظ »
نیازی به shell scripting نیستمد. ما یک نوع کپی داریم که دقیقا همون فایل اول رو یکی نگه می‌داره ولی مثل اینکه دوتا فایل داری! الآن برات توضیح ‌می‌دم.
یه دستوری بود که با ترمینال می‌زدیم ولی الآن متاسفانه یادم رفته اگه یادم اومد برات می‌ذارم. دستور ایجوریی بود، اگه می‌زدی فایل a رو دو تا می‌کرد و مثلا حتی اسم فایل دومی رو می‌ذاشتی b، ولی هرکدومش رو که ویرایش می‌کردی اون یکی دیگه هم ویرایش می‌شد و تغییر پیدا می‌کرد اگه اونو یادم اومد همین‌جا می‌ذارم.
فعلا می‌تونی از از دستور make link استفاده کنی. رو خود هر فایل راست کلیک کن و بعد بزن make link. اینجوری اگه فایل جدید رو دست‌کاری کنی مثل اینه که فایل اصلی رو ویرایش کردی.

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1319
پاسخ : درخواست shell script
« پاسخ #2 : 31 تیر 1391، 11:00 ق‌ظ »
میشه منظورت را واضح تر بگی!

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19722
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : درخواست shell script
« پاسخ #3 : 31 تیر 1391، 01:28 ب‌ظ »
نیازی به shell scripting نیستمد. ما یک نوع کپی داریم که دقیقا همون فایل اول رو یکی نگه می‌داره ولی مثل اینکه دوتا فایل داری! الآن برات توضیح ‌می‌دم.
یه دستوری بود که با ترمینال می‌زدیم ولی الآن متاسفانه یادم رفته اگه یادم اومد برات می‌ذارم. دستور ایجوریی بود، اگه می‌زدی فایل a رو دو تا می‌کرد و مثلا حتی اسم فایل دومی رو می‌ذاشتی b، ولی هرکدومش رو که ویرایش می‌کردی اون یکی دیگه هم ویرایش می‌شد و تغییر پیدا می‌کرد اگه اونو یادم اومد همین‌جا می‌ذارم.
فعلا می‌تونی از از دستور make link استفاده کنی. رو خود هر فایل راست کلیک کن و بعد بزن make link. اینجوری اگه فایل جدید رو دست‌کاری کنی مثل اینه که فایل اصلی رو ویرایش کردی.
منظورت ln عه؟
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
پاسخ : درخواست shell script
« پاسخ #4 : 31 تیر 1391، 07:17 ب‌ظ »
از دوستان کسی می تونه یه شل اسکریپت بنویسه که فایل های تکمیلی رو کپی کنه کنار اصلیشون؟
با دستور find می‌تونی اینکار رو انجام بدی.
find /path -name "*AS" -type f -exec cp "{}" /newpath \;

آفلاین anishtain4

  • Newbie
  • *
  • ارسال: 15
پاسخ : درخواست shell script
« پاسخ #5 : 31 تیر 1391، 09:59 ب‌ظ »
گویا منظورم رو اصلا درست نرسوندم.
فرض کنید پنج تا فایل داریم به این صورت
asli/folderA/1.dwg
asli/folderA/2.dwg
asli/folderA/3.dwg
asli/folderB/4.dwg
asli/folderB/5.dwg

حالا این فایل ها رو میدیم دست یه بنده خدایی، اون تو همه این فایل ها یه سری تغییرات میده و اینطوری میشه:

build/dorostA/1 as.dwg
build/dorostB/2 as.dwg
build/dorostC/3as.dwg
build/dorostA/4 As.dwg
build/dorostD/5 as.dwg

یعنی اسم فایل ها دقیقا همون قبلیا هست که یه as بهشون اضافه شده و تو همون فولدر ها هم نیستن. حالا کاری که باید انجام بدم اینه که سری دوم رو کنار سری اول کپی کنم که هر فایل اصلی نسخه ی ای رو هم که as داره کنارش داشته باشه. فقط مشکل اینه که تعداد فایل ها نزدیک 300 تا هست و دستی نمیشه این کارو کرد

آفلاین Matrix.1372

  • High Hero Member
  • *
  • ارسال: 1966
  • جنسیت : پسر
  • Ma3x
    • Ma3x
پاسخ : درخواست shell script
« پاسخ #6 : 31 تیر 1391، 10:22 ب‌ظ »
یعنی ایشون ۳۰۰ تا فایل اولیه با ۳۰۰ تا فولدر دارن.
که ۳۰۰ تا فایل ثانویه باید یکی یکی برن توی فولدرهای خودشون.
فک کنم اینطوری باشه.

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
پاسخ : درخواست shell script
« پاسخ #7 : 01 امرداد 1391، 05:07 ق‌ظ »
دقیقا بر مبنای مثالی زدید نوشتمش. این فایل رو در مکانی قرار بدید که دو پوشه asli و build قرار داده شده، بهش مجوز اجرا بدید و اجراش کنید. (یا با خود python اجراش کنید)
#!/usr/bin/python
import os,shutil
for root1,dirs1,files1 in os.walk("asli"):
for file1 in files1:
for root2,dirs2,files2 in os.walk("build"):
for file2 in files2:
if file2[-6:].lower() == "as.dwg" and (file2[:-6] == file1[:-4] or file2[:-7] == file1[:-4]):
print root2+"/"file2+" -> "+root1+"/"
shutil.copy(root2+"/"+file2,root1+"/")

آفلاین سلمان م.

  • ناظر انجمن
  • *
  • ارسال: 4106
  • جنسیت : پسر
  • GNU Operating System - سیستم عامل گنو
پاسخ : درخواست shell script
« پاسخ #8 : 01 امرداد 1391، 09:32 ق‌ظ »
دقیقا بر مبنای مثالی زدید نوشتمش. این فایل رو در مکانی قرار بدید که دو پوشه asli و build قرار داده شده، بهش مجوز اجرا بدید و اجراش کنید. (یا با خود python اجراش کنید)
#!/usr/bin/python
import os,shutil
for root1,dirs1,files1 in os.walk("asli"):
for file1 in files1:
for root2,dirs2,files2 in os.walk("build"):
for file2 in files2:
if file2[-6:].lower() == "as.dwg" and (file2[:-6] == file1[:-4] or file2[:-7] == file1[:-4]):
print root2+"/"file2+" -> "+root1+"/"
shutil.copy(root2+"/"+file2,root1+"/")
دستت درد نکنه من از ظرف انیشتین۴ ازت تشکر می‌کنم.

آفلاین anishtain4

  • Newbie
  • *
  • ارسال: 15
پاسخ : درخواست shell script
« پاسخ #9 : 01 امرداد 1391، 01:47 ب‌ظ »
دقیقا بر مبنای مثالی زدید نوشتمش. این فایل رو در مکانی قرار بدید که دو پوشه asli و build قرار داده شده، بهش مجوز اجرا بدید و اجراش کنید. (یا با خود python اجراش کنید)
#!/usr/bin/python
import os,shutil
for root1,dirs1,files1 in os.walk("asli"):
for file1 in files1:
for root2,dirs2,files2 in os.walk("build"):
for file2 in files2:
if file2[-6:].lower() == "as.dwg" and (file2[:-6] == file1[:-4] or file2[:-7] == file1[:-4]):
print root2+"/"file2+" -> "+root1+"/"
shutil.copy(root2+"/"+file2,root1+"/")

آقا دست درد نکنه، خیلی خیلی کمک کردی

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
پاسخ : درخواست shell script
« پاسخ #10 : 01 امرداد 1391، 03:14 ب‌ظ »
ASLI="";
BUILD="";

find $BUILD/* -name '*.dwg' -exec rename 's/ /_/g' {} \;

find $ASLI/* -name '*.dwg' > address_of_dwg_files
find $ASLI/* -name '*.dwg' -exec basename {} \; > dwg_files

sed  's/\.dwg//g'  dwg_files > dwg_files_base


for ((i=1 ; i<=$(cat dwg_files_base | wc -l ) ; i++))
do
TEMP=$(sed -n ''$i'p' dwg_files_base);
cp $(find $BUILD/* -name ''$TEMP'_as.dwg') $( echo $( dirname  `sed -n ''$i'p' address_of_dwg_files` )/ )
done
 

آفلاین anishtain4

  • Newbie
  • *
  • ارسال: 15
پاسخ : درخواست shell script
« پاسخ #11 : 02 امرداد 1391، 02:12 ق‌ظ »
doomhammer jan daset kheili dard nakone, koli az in ghesmate rename estefade kardam. albate bayad ye seri handle ham khodam behesh ezafe konam

آفلاین سلمان م.

  • ناظر انجمن
  • *
  • ارسال: 4106
  • جنسیت : پسر
  • GNU Operating System - سیستم عامل گنو
پاسخ : درخواست shell script
« پاسخ #12 : 02 امرداد 1391، 02:47 ق‌ظ »
دوست عزیز لطفا با دبیره‌ی فارسی بنویسید و نه «پینگیلیش»

آفلاین phantasm

  • Newbie
  • *
  • ارسال: 3
پاسخ : درخواست shell script
« پاسخ #13 : 17 امرداد 1391، 09:28 ب‌ظ »
با یک خط اینجوری میشه :)

 ls *.as directory1 | xargs -I {} cp directory1/{} directory2
« آخرین ویرایش: 17 امرداد 1391، 09:29 ب‌ظ توسط phantasm »

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
پاسخ : درخواست shell script
« پاسخ #14 : 17 امرداد 1391، 11:50 ب‌ظ »
با یک خط اینجوری میشه :)
 ls *.as directory1 | xargs -I {} cp directory1/{} directory2
این چیزی نیست که ایشون می‌خواستن :) برنامه شما یک کار دیگه رو انجام میده  ;)