نقل الملفات والمجلدات عن طريق الخطأ إلى أماكن غير موجودة
سؤال
غالبًا ما أقوم بتنفيذ الأمر مثل:
mv folder $something_that_does_not_exist
mv files* $something_that_does_not_exist
ثم أدركت أن ملفاتي قد اختفت.لا أستطيع رؤيتهم حتى في المجلد "$something_that_does_not_exist".أين ذهبت ملفاتي ومجلداتي؟كيف يمكنني استعادتهم؟
المحلول
في أجل منع حدوث هذه المشكلة، لدي عادة من إلحاق دائما / إلى نهاية أسماء الدليل عند استخدام cp
أو mv
:
$ touch foo
$ mv foo bar/
mv: cannot move `foo' to `bar/foo': No such file or directory
وبدون مائلة زائدة، mv
يفعل عملية إعادة تسمية الملف. قد تجد أن الملف الخاص بك (ق) قد تغيرت الاسم.
نصائح أخرى
إذا يوسع $something_that_does_not_exist
إلى أي شيء (لكني لست متأكدا إذا كان هذا هو مشكلتك؟) ثم ستفشل ام الأول. ستفشل الأمر mv الثاني أيضا ما لم توسيع "files*"
بالضبط ملفين أو إذا كان آخر اسم الملف "files*"
تتسع ليحدث ليكون دليلا. ثم سيتم نقل الملفات إلى هذا الدليل.
وإذا كان الأمر هي في وضع السيناريو وتريد النصي لإحباط عند محاولة توسيع المتغير ولم يتم تعيين ذلك، يمكنك استخدام المعدل علامة استفهام. مثال:
$ echo ${DISPLAY?}; echo display
:0.0
display
$ echo ${MYTEST?}; echo mytest
bash: MYTEST: parameter null or not set
$
وحتى إذا كنت تستخدم
mv folder ${something_that_does_not_exist?}
و لم يتم تعيين something_that_does_not_exist
، لن يتم تنفيذ الأوامر التالية.
وأنت لن تكون قادرة على الحصول على الملفات الخاصة بك مرة أخرى، حيث أن قذيفة ستوسع الملفات وأعتقد أن الآن أن يسمى الملف الأخير على لائحة $ something_that_does_not_exist.
وسيكون قد تم تجاوزها جميع الملفات الأخرى الخاصة بك في القائمة. لذلك لا يمكن الحصول عليها مرة أخرى.
وتحرير: في بلدي smoothwall VM (الوحيد جنو / لينكس في أصابعي الآن!) أحصل على هذا:
$ mkdir t1
$ mv t1 t2
$ ls
t2/
$ mv t2 t1
$ cd t1
$ touch f1 f2 f3 f4
$ mv f* ../t2
mv: target `../t2' is not a directory
mv folder $something_that_does_not_exist
وهذا يجب أن يكون على خطأ:
$ mkdir folder
$ mv folder
mv: Insufficient arguments (1)
Usage: mv [-f] [-i] f1 f2
mv [-f] [-i] f1 ... fn d1
mv [-f] [-i] d1 d2
والحالة الأخرى يعتمد على ما files*
المتطابقة:
mv files* $something_that_does_not_exist
إذا المباراة النهائية عبارة عن دليل، هل من المحتمل العثور على الملفات الخاصة بك هناك. وإلا سيكون لديك إما إعادة تسمية الملف الأول أن يكون نفس الثانية أو كان خطأ آخر على النحو الوارد أعلاه.
1) حاولت نقل "المجلد" الدليل:
mv folder abcde
إذا كان "abcde" دليلًا موجودًا، فسيتم نقل "المجلد" إلى "abcde".إذا كان "abcde" ملفًا موجودًا، فسيفشل الأمر.وإلا فسيتم إعادة تسمية "المجلد" إلى "abcde".
2) تحاول نقل بعض الملفات:
mv files* abcde
إذا كان "abcde" دليلًا موجودًا، فسيتم نقل "الملفات*" إلى "abcde".بخلاف ذلك، إذا كان هناك ملف واحد فقط يطابق "files*"، فسيتم إعادة تسمية هذا الملف إلى "abcde".وإلا فإن الأمر سوف تفشل.