سؤال

لدي عدد من الملفات في مجلد، وأريد استبدال كل حرف مسافة في جميع أسماء الملفات بشرطات سفلية.كيف يمكنني تحقيق ذلك؟

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

المحلول

وهذا ينبغي أن نفعل ذلك:

for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done

نصائح أخرى

وانا افضل استخدام الأمر "تغيير الاسم"، والتي تأخذ regexes على غرار بيرل:

rename "s/ /_/g" *

ويمكنك القيام تجف مع العلم -n:

rename -n "s/ /_/g" *

استخدم ا ...

for i in *' '*; do   mv "$i" `echo $i | sed -e 's/ /_/g'`; done

إذا كنت تريد أن تجرب ذلك قبل تضغط على الزناد مجرد تغيير mv إلى echo mv.

ماذا لو كنت تريد تطبيق مهمة الاستبدال بشكل متكرر؟كيف يمكنك أن تفعل ذلك؟

حسنًا، لقد وجدت الإجابة بنفسي.لا يوجد الحل الأكثر أناقة (يحاول أيضًا إعادة تسمية الملفات التي لا تتوافق مع الشرط) ولكنه يعمل.(راجع للشغل، في حالتي كنت بحاجة إلى إعادة تسمية الملفات باستخدام '%20'، وليس بشرطة سفلية)

#!/bin/bash
find . -type d | while read N
do
     (
           cd "$N"
           if test "$?" = "0"
           then
               for file in *; do mv "$file" ${file// /%20}; done
           fi
     )
done

إذا كنت تستخدم باش:

for file in *; do mv "$file" ${file// /_}; done

واقتبس المتغيرات الخاصة بك:

for file in *; do echo mv "'$file'" "${file// /_}"; done

وإزالة "صدى" للقيام تسمية الفعلية.

وحاول شيئا من هذا القبيل، على افتراض جميع الملفات الخاصة بك و. TXT:

for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done

وأسهل طريقة لاستبدال سلسلة (حرف مسافة في قضيتك) مع سلسلة أخرى في Linux تستخدم sed. يمكنك أن تفعل ذلك على النحو التالي

sed -i 's/\s/_/g' *

وآمل أن يساعد هذا.

وهنا حل آخر:

ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
  1. يستخدم awk لإضافة علامات الاقتباس حول اسم الملف
  2. يستخدم sed لاستبدال المسافة بالشرطات السفلية؛يطبع الاسم الأصلي مع علامات الاقتباس (من awk)؛ثم الاسم البديل
  3. يأخذ xargs سطرين في كل مرة ويمررهما إلى mv

وأعتقد أن الجواب في <وأ href = "http://www.commandlinefu.com/commands/view/2518/replace-spaces-in-filenames-with-underscores" يختلط = "نوفولو noreferrer "> استبدال المسافات في أسماء الملفات مع سفلية .

لإعادة تسمية كافة الملفات مع استخدام تمديد .py، find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"

وإخراج نموذج،

$ find . -iname "*.py" -type f                                                     
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f                                                     
./Sample/Sample_File.py
./Sample_File.py
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top