Linux - استبدال المسافات في أسماء الملفات
سؤال
لدي عدد من الملفات في مجلد، وأريد استبدال كل حرف مسافة في جميع أسماء الملفات بشرطات سفلية.كيف يمكنني تحقيق ذلك؟
المحلول
وهذا ينبغي أن نفعل ذلك:
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
- يستخدم awk لإضافة علامات الاقتباس حول اسم الملف
- يستخدم sed لاستبدال المسافة بالشرطات السفلية؛يطبع الاسم الأصلي مع علامات الاقتباس (من awk)؛ثم الاسم البديل
- يأخذ 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