سؤال

لإنشاء قائمة تشغيل لجميع الموسيقى الموجودة في مجلد، أستخدم الأمر التالي في bash:

ls > list.txt

وأود أن استخدام نتيجة الأشخاص ذوي الإعاقة (طباعة دليل العمل) لاسم قائمة التشغيل.

شيء مثل:

ls > ${pwd}.txt

لكن هذا لا يعمل - هل يمكن لأحد أن يخبرني ما هو بناء الجملة الذي أحتاج إلى استخدامه للقيام بشيء مثل هذا؟

يحرر: كما هو مذكور في التعليقات، سينتهي الأمر بـ pwd بإعطاء مسار مطلق، لذلك سيتم تسمية قائمة التشغيل الخاصة بي في نهاية المطاف بـ .txt في بعض الأدلة - d'oh!لذلك سأضطر إلى تقليم المسار.شكرًا لاكتشافك ذلك - ربما كنت سأقضي وقتًا طويلًا أتساءل أين ذهبت ملفاتي!

هل كانت مفيدة؟

المحلول

أفضل طريقة للقيام بذلك هي مع "$(command substitution)" (شكرًا، على الأرض):

ls > "$(pwd).txt"

ستشاهد أحيانًا أيضًا أشخاصًا يستخدمون تدوين backtick الأقدم، ولكن هذا قد حدث بالفعل عدة عيوب من حيث التعشيش والهروب:

ls > "`pwd`.txt"

لاحظ أن الاستبدال غير المعالج لـ pwd هو مسار مطلق، لذلك يقوم الأمر أعلاه بإنشاء ملف بنفس الاسم في نفس الدليل مثل دليل العمل، ولكن مع .txt امتداد.وأشار توماس كامير إلى أن basename يقوم الأمر بإزالة الدليل الرئيسي، لذلك سيؤدي هذا إلى إنشاء ملف نصي في الدليل الحالي باسم هذا الدليل:

ls > "$(basename "$(pwd)").txt"

شكرًا أيضًا لـ erichui لطرح مشكلة المسافات في المسار.

نصائح أخرى

وهذا يعادل الحل backtick:

ls > $(pwd).txt

لتنفيذ ما قلته حرفيًا، يمكنك تجربة ما يلي:

ls > `pwd`.txt

والتي سوف تستخدم اسم المسار الكامل، والذي ينبغي أن يكون على ما يرام.لاحظ أنه إذا قمت بذلك في الدليل المنزلي الخاص بك ، والذي قد يكون في /Home /Hoboben ، فستحاول Create /Home/Hoboben.txt ، ملف نصي في الدليل أعلاه.

هل هذا ما أردت؟

إذا كنت تريد أن يحتوي الدليل على ملف سمي بعده ، فستحصل على اسم الدليل الحالي وإلحاقه باستخدام .txt إلى PWD.

الآن، بدلاً من استخدام الأمر pwd...لماذا لا تستخدم متغير البيئة للأشخاص ذوي الإعاقة؟

على سبيل المثال:

ls > $PWD.txt

أو

ls > ${PWD}.txt

ربما هو ما كنت تحاول تذكره في المثال الثاني.

إذا كنت في /home/hoboben وتريد إنشاء /home/hoboben/hoboben.txt، فجرّب:

ls > ${PWD}/${PWD##*/}.txt

إذا قمت بذلك، فسيحتوي الملف على اسمه الخاص، لذلك في أغلب الأحيان، يمكنك معالجة ذلك بإحدى الطرق القليلة.يمكنك إعادة التوجيه إلى مكان آخر ونقل الملف أو تسمية الملف بدءًا من نقطة لإخفائه من الأمر ls طالما أنك لا تستخدم العلامة -a (ثم أعد تسمية الملف الناتج بشكل اختياري).

أكتب نصوصي الخاصة لإدارة التسلسل الهرمي للدليل لملفات الموسيقى وأستخدم الدلائل الفرعية المسماة ".info"، على سبيل المثال، لاحتواء بيانات المسار في بعض الملفات الاحتياطية (في الأساس، "أخفي" البيانات الوصفية بهذه الطريقة).يسير الأمر على ما يرام لأن احتياجاتي بسيطة ومجموعتي صغيرة.

أظن أن المشكلة قد تكمن في وجود مسافات في أحد أسماء الدليل.على سبيل المثال، إذا كان دليل العمل الخاص بك هو "/home/user/music/artist name".سوف يرتبك باش معتقدًا أنك تحاول إعادة التوجيه إلى /home/user/music/artist وname.txt.يمكنك إصلاح هذا بعلامات الاقتباس المزدوجة

ls > "$(pwd).txt"

وأيضًا، قد لا ترغب في إعادة التوجيه إلى $(pwd).txt.في المثال أعلاه، ستقوم بإعادة توجيه الإخراج إلى الملف "/home/user/music/artist name.txt"

بناء الجملة هو:

ls > `pwd`.txt

هذا هو الحرف """ الموجود أسفل "~"، وليس الاقتباس الفردي العادي.

سيؤدي استخدام الطريقة المذكورة أعلاه إلى إنشاء الملفات بمستوى أعلى من الدليل الحالي.إذا كنت تريد أن تنتقل جميع قوائم التشغيل إلى دليل واحد، فستحتاج إلى القيام بشيء مثل:

#!/bin/sh

MYVAR=`pwd | sed "s|/|_|g"`
ls > /playlistdir/$MYVAR-list.txt

لتجريد الكل ما عدا اسم الدليل

ls >/playlistdir/${PWD##/*}.txt

ربما لا يكون هذا ما تريده لأنك لا تعرف مكان الملفات (إلا إذا قمت بتغيير الأمر ls)

لاستبدال "/" بـ "_"

ls >/playlistdir/${PWD//\//_}.txt

ولكن بعد ذلك ستبدو قائمة التشغيل قبيحة وربما لا تتناسب مع نافذة التحديد

لذلك سيعطيك هذا اسمًا قصيرًا يمكن قراءته ومسارات قابلة للاستخدام داخل الملف

ext=.mp3 #leave blank for all files
for FILE in "$PWD/*$ext"; do echo "$FILE";done >/playlistdir/${PWD##/*}.txt
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top