انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: anishtain4 در 31 تیر 1391، 08:57 قظ
-
سلام دوستان
من یه تعداد زیادی فایل دارم ( در حد 300 تا)
این فایل ها دو دسته هستن، یه سری با اسامی اصلی، و فایل های تکمیلی که همون اسم اصلی رو دارن و آخرشون AS نوشته شده. مشکل من اینه که اینا کنار هم نیستن. فایل های اصلی همشون تو یه فولدر هستن، و فایل های تکمیلی تو یه فولدر دیگه اما ساختار فولدرها یک شکل نیست. از دوستان کسی می تونه یه شل اسکریپت بنویسه که فایل های تکمیلی رو کپی کنه کنار اصلیشون؟
-
نیازی به shell scripting نیستمد. ما یک نوع کپی داریم که دقیقا همون فایل اول رو یکی نگه میداره ولی مثل اینکه دوتا فایل داری! الآن برات توضیح میدم.
یه دستوری بود که با ترمینال میزدیم ولی الآن متاسفانه یادم رفته اگه یادم اومد برات میذارم. دستور ایجوریی بود، اگه میزدی فایل a رو دو تا میکرد و مثلا حتی اسم فایل دومی رو میذاشتی b، ولی هرکدومش رو که ویرایش میکردی اون یکی دیگه هم ویرایش میشد و تغییر پیدا میکرد اگه اونو یادم اومد همینجا میذارم.
فعلا میتونی از از دستور make link استفاده کنی. رو خود هر فایل راست کلیک کن و بعد بزن make link. اینجوری اگه فایل جدید رو دستکاری کنی مثل اینه که فایل اصلی رو ویرایش کردی.
-
میشه منظورت را واضح تر بگی!
-
نیازی به shell scripting نیستمد. ما یک نوع کپی داریم که دقیقا همون فایل اول رو یکی نگه میداره ولی مثل اینکه دوتا فایل داری! الآن برات توضیح میدم.
یه دستوری بود که با ترمینال میزدیم ولی الآن متاسفانه یادم رفته اگه یادم اومد برات میذارم. دستور ایجوریی بود، اگه میزدی فایل a رو دو تا میکرد و مثلا حتی اسم فایل دومی رو میذاشتی b، ولی هرکدومش رو که ویرایش میکردی اون یکی دیگه هم ویرایش میشد و تغییر پیدا میکرد اگه اونو یادم اومد همینجا میذارم.
فعلا میتونی از از دستور make link استفاده کنی. رو خود هر فایل راست کلیک کن و بعد بزن make link. اینجوری اگه فایل جدید رو دستکاری کنی مثل اینه که فایل اصلی رو ویرایش کردی.
منظورت ln عه؟
-
از دوستان کسی می تونه یه شل اسکریپت بنویسه که فایل های تکمیلی رو کپی کنه کنار اصلیشون؟
با دستور find میتونی اینکار رو انجام بدی.
find /path -name "*AS" -type f -exec cp "{}" /newpath \;
-
گویا منظورم رو اصلا درست نرسوندم.
فرض کنید پنج تا فایل داریم به این صورت
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 تا هست و دستی نمیشه این کارو کرد
-
یعنی ایشون ۳۰۰ تا فایل اولیه با ۳۰۰ تا فولدر دارن.
که ۳۰۰ تا فایل ثانویه باید یکی یکی برن توی فولدرهای خودشون.
فک کنم اینطوری باشه.
-
دقیقا بر مبنای مثالی زدید نوشتمش. این فایل رو در مکانی قرار بدید که دو پوشه 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+"/")
-
دقیقا بر مبنای مثالی زدید نوشتمش. این فایل رو در مکانی قرار بدید که دو پوشه 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+"/")
دستت درد نکنه من از ظرف انیشتین۴ ازت تشکر میکنم.
-
دقیقا بر مبنای مثالی زدید نوشتمش. این فایل رو در مکانی قرار بدید که دو پوشه 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+"/")
آقا دست درد نکنه، خیلی خیلی کمک کردی
-
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
-
doomhammer jan daset kheili dard nakone, koli az in ghesmate rename estefade kardam. albate bayad ye seri handle ham khodam behesh ezafe konam
-
دوست عزیز لطفا با دبیرهی فارسی بنویسید و نه «پینگیلیش»
-
با یک خط اینجوری میشه :)
ls *.as directory1 | xargs -I {} cp directory1/{} directory2
-
با یک خط اینجوری میشه :)
ls *.as directory1 | xargs -I {} cp directory1/{} directory2
این چیزی نیست که ایشون میخواستن :) برنامه شما یک کار دیگه رو انجام میده ;)
-
اتفاقا دقیقا همون کارو انجام میده .من اول کدم رو تست کردم بعد پست زدم .منطقش هم خیلی سادست !
-
اتفاقا دقیقا همون کارو انجام میده .من اول کدم رو تست کردم بعد پست زدم .منطقش هم خیلی سادست !
خیر :)
برای مثال فایلهایی که ایشون گفتند آخرشون dwg داره و as قبل از اون میاد. فایلها در پوشههای مختلف قرار دارند. حروف as ممکنه کوچیک و بزرگ باشند، مثلا:
build/dorostC/3as.dwg
build/dorostA/4 As.dwg
build/dorostD/5 as.dwg
و ...
-
سلام دوستان
من یه تعداد زیادی فایل دارم ( در حد 300 تا)
این فایل ها دو دسته هستن، یه سری با اسامی اصلی، و فایل های تکمیلی که همون اسم اصلی رو دارن و آخرشون AS نوشته شده. مشکل من اینه که اینا کنار هم نیستن. فایل های اصلی همشون تو یه فولدر هستن، و فایل های تکمیلی تو یه فولدر دیگه اما ساختار فولدرها یک شکل نیست. از دوستان کسی می تونه یه شل اسکریپت بنویسه که فایل های تکمیلی رو کپی کنه کنار اصلیشون؟
کد نیازهای بالا رو برطرف میکنه ....
خیلی از دقت نظرت ممنونم :)