Bash Tips
977 subscribers
14 photos
4 files
45 links
רוצים להשתמש בלינוקס אבל לא ממש מכירים את הכלים שהיא מספקת לעבודה?

בערוץ הבא תמצאו אוסף טיפים שימושיים ב-Bash והכרות עם כלים שונים שעשויים לחסוך מאמץ ועבודה בכתיבת סקריפטים ומימוש אוטומציות.
Download Telegram
Bash Tips
נענים לאתגר רמת קושי: #advanced האתגר הבא מבוסס על סיפור אמיתי, כמו רוב הטיפים בערוץ 😊. קובץ זיפ הבא מכיל רשימת קבצי דמה PDF של אקורדים לגיטרה בשמות עבריים, שמות הקבצים מורכבים משם הזמר ושם השיר (לרוב), חלק משמות הקבצים הן עם רווח והאחרים עם . או עם _ כמפריד…
פתרון האתגר סדר בחדר
רמת קושי: #beginners

משימה ראשונה
בואו נציץ לרגע במשימה הראשונה של האתגר ונראה מהי.

לבנות את עץ התיקיות על סמך זה ששם הזמר הוא בתחילת שם הקובץ,
שירים שאין להם שם זמר יכנסו לתיקיה בעלת שם השיר, או קומבינציה מוזרה אחרת.

האתגר הראשון בו אנו נתקלים כשאנו נגשים לאתגר הוא חוסר סטנדרטיזציה בשמות הקבצים, אם נעיף רגע מבט על כל הקבצים נשים לב שרוב הקבצים מסודרים כך ששם הזמר מופיע בתחילת שם הקובץ, אם כן בשביל להשיג סדר ראשוני בקבצים נוכל לארגן חלק ניכר מהקבצים על ידי שליפת 2 המילים הראשונות של שם הקובץ וליצור ממנו תיקייה.

וזה בדיוק מה שעושה הקוד הבא

1 for file in *;
2 do
3 sed_expr='s/^[[:punct:][:space:]]//g ; s/[_,-]/ /g'
4 dest="test/$(echo "${file}" | sed "$sed_expr" | cut -f 1-2 -d ' ' )"
5 mkdir -p "$dest"
6 cp "$file" "$dest"
7 done

שורה 1: אוספת את כל הקבצים שבתיקייה ומעבירה קובץ קובץ לעיבוד.
שורה 3 ו 4: מעבירה את שם הקובץ את התהליך הבא שמורכב מ3 חלקים

1. מעבירה את שם הקובץ הבא לפקודת sed
שמחה_פרידמן_עוד_יבוא_היום_אקורדים_קלים.pdf


2. פקודת sed מריצה שני עיבודים כדי ליצור סטנדרט בין כל הקבצים (; הוא חוצץ בין שני הביטויים)
שלב א' היא מסירה את כל התווים המיוחדים והרווחים שמופיעים בתווים הראשונים של הקובץ .
שלב ב' היא מחליפה את תווי _ , - ברווח.
מה שמביא אותנו למצב ששם הקובץ כרגע הוא כך
שמחה פרידמן עוד יבוא היום אקורדים קלים.pdf

3. בחירה של 2 המילים הראשונות, איך זה קורה?
פקודת cut מקבלת פרמטר לפיו היא מפצלת מילים על פי רווח,
ואז אנו מעבירים טווח של מילים אותם אנו רוצים לשלוף, 1-2 אלו שני המילים הראשונות.

אז כרגע בסופו של תהליך שורה 3 נראית כך
dest="test/שמחה פרידמן"

מפה זה די פשוט וקל
שורה 5: יוצרת תיקיית על שם הזמר.
שורה 6: מעתיקה את השיר לתיקייה שכרגע נוצרה.

התוצאה היא רשימת תיקיות שמכילות את שני המילים הראשונות של הקבצים.
קבצים שיש להם את אותם 2 מילים בראש הקובץ מקובצים תחת אותה תיקייה.


עד כאן חלק א' של האתגר
יש לכם רעיונות לשיפור, הערות, טיפים? מוזמנים לשתף בתגובות
בימים הקרובים אפרסם פתרון גם למשימה השניה, עד אז מי שרוצה לאתגר את עצמו מוזמן

#challenge
#loops
#sed
#cut

@bash_tips
יציאה מלולאה מקוננת
רמת קושי: #beginners

בבאש כמו בכל שפת תכנות בשביל להפסיק ריצה של לולאה משתמשים בב break,

for i in {1..10}
do
echo $i
sleep 1
  break
done

מה עושים כשהלולאה רצה בתוך לולאה אחרת (לולאה מקוננת) ורוצים לצאת משתי הלולאות?

לשם כך באש מאפשרת להעביר פרמטר ל break כדי להגדיר עד איזה עומק השבירה של הלולאה תתבצע, בדוגמה הבאה בשבירה תתבצע על שתי הלולאות.

for i in {1..10}
do
for j in {1..10}
do
echo $i
sleep 1
break 2
done
echo first loop
done

#loops

@bash_tips