الأمر باقتطاع كافة أسماء في 255 حرفا
سؤال
وهناك دليل NTFS مفتوح في قذيفة باش. وما أمر باقتطاع متكرر عن أسماء الملفات في الدليل إلى حد 255 حرفا اللازمة لext3 و؟
المحلول
إذا كان لديك الوصول إلى قذيفة ويندوز، يمكنك استخدام:
@echo off
setlocal EnableDelayedExpansion
REM loop over all files in the cwd
for /f %%a in ('dir /a-d /b') do (
REM store this filename in a variable so we can do substringing
set ThisFileName=%%a
REM now take a substring
set ThisShortFileName=!ThisFileName:~0,255!
REM finally, the rename:
echo ren %%a !ThisShortFileName!
)
:EOF
endlocal
و(ملاحظة:. واضاف لقد صدى قبل الأمر إعادة تسمية فقط حتى تتمكن من التحقق بصريا أنه يعمل قبل فعلا تشغيله يعمل على بلدي مربع)
وأنا متأكد من شخص ما على مربع لا شىء * الآن يمكن أن تجعل السيناريو مماثل لباش، ولكن أنا عالقة في ويندوز العالم:)
وحظا سعيدا!
نصائح أخرى
وعلى افتراض أن قذيفة يجلس في الدليل NTFS كما انها PWD:
<اقتباس فقرة> وfor f in *; do mv $f ${f:0:255}; done
وعلى غرار إصدار المستندة إلى الحوار الاقتصادي الاستراتيجي ديف، لكنها تتجنب إكسيك لكل ملف. ستفجر على دير ضخم حقا، بسبب الحد الأقصى سطر الأوامر، ولا يعمل دليل فرعي.
$ cat truncname
#!/bin/bash
# requires basename, dirname, and sed
mv $1 `dirname $1`/`basename $1 | sed 's/^\(.\{0,255\}\).*/\1/'`
$ chmod a+x truncname
$ find . -exec ./truncname {} \;
لا تنتمي إلى StackOverflow