![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Forum Rules | FAQ | Contribute | Members List | Arcade | Search | Today's Posts | Mark Forums Read |
| UNIX for Advanced & Expert Users Advanced UNIX and Linux questions go here. Expert-to-Expert. |
|
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Duplicates to be removed | prvnrk | Shell Programming and Scripting | 6 | 07-10-2008 10:06 AM |
| a way to tell what was removed after rm -rf ? | thosch | UNIX for Dummies Questions & Answers | 4 | 06-30-2008 02:20 AM |
| after init all /tmp file has been removed | yesthomas | SUN Solaris | 5 | 12-06-2005 03:48 AM |
| directories are not getting removed | slavam | Shell Programming and Scripting | 6 | 11-17-2005 05:26 PM |
| Will Old Files Be Removed | sunsation | UNIX for Dummies Questions & Answers | 5 | 06-26-2005 09:24 PM |
|
|
Submit Tools | LinkBack | Thread Tools | Search this Thread | Display Modes |
|
#1
|
|||
|
|||
|
Removed ^M from Libraries
I used the following to remove ^M in all files - I guess i did it in haste
find / -name "*" | xargs perl -p -i -e 's/^M//g' * It changed all my LIBRABRIES since i used -- perl -p -i -e 's/^M//g' * Is there some way to revert this from my libraries . Does any revert command exits for the Control M in libraries. I believe my libraries are corrupted now. Regards, Telecomics |
| Forum Sponsor | ||
|
|
|
#2
|
|||
|
|||
|
Sorry, but in this case a R&R (reboot and restore) is called for.
It is not - not even theoretically - possible to revert this because it is not clear where the "^M"s have been: You have EOLs which are preceeded by a ^M and EOLs which aren't. It is easy to search for the ones which are and change them - like you have done. But now you have only EOLs which aren't preceeded by ^M and if you now add a ^M before each of them your libraries will perhaps be as corrupted as they are now because there will be any number of superfluous ^Ms in there. I hope this helps - if only to avoid it the next time. bakunin |
|
#3
|
|||
|
|||
|
As a minor correction to what bakunin wrote, actually ^M doesn't stand for carriage return, it means the character M at beginning of line (i.e. beginning of file or immediately after a line feed).
|
|
#4
|
|||
|
|||
|
Hm, I would think it depends on what the poster has really typed when he entered the perl statement's substitution.
If he pressed ^V and then hit Enter then ^M should represent \015. But if he actually only typed a caret (or circumflex) followed by upper case M, yes than it just represents those Ms. Maybe he should pipe his statement from the history into an octal dump to make sure? Code:
$ echo ^M|od -t a 0000000 cr nl 0000002 $ echo ^M|od -t a 0000000 ^ M nl 0000003 |
|
#5
|
|||
|
|||
|
It's really immaterial; the pivotal point here is that it cannot be undone.
|
|
#6
|
|||
|
|||
|
I never questioned that.
As the other poster already said, it's time to role the restore from the backup. Just an aside, if you (the thread issuer) like me have your filesystems on LVM volumes (yes I do have a separate lv_usr) there is a neat feature that can be used for rolling back quickly from an unfortunate experiment like yours without even rolling a regular backup. Before I do such dubious recursive substitutions I just would create a snapshot volume of the affected LV like Code:
[root@toshsat:~]
# df /usr
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vgfc-lv_usr
5160576 3193892 1704540 66% /usr
[root@toshsat:~]
# vgdisplay vgfc|egrep 'PE Size|Free PE'
PE Size 8.00 MB
Free PE / Size 11 / 88.00 MB
[root@toshsat:~]
# lvcreate -s -n snapof_usr -l 11 /dev/vgfc/lv_usr
Logical volume "snapof_usr" created
[root@toshsat:~]
# lvs -o lv_name,lv_size,origin,snap_percent vgfc
LV LSize Origin Snap%
lv_depot 9.80G
lv_home 512.00M
lv_opt 512.00M
lv_root 1.00G
lv_tmp 512.00M
lv_usr 5.00G
lv_usr_local 256.00M
lv_var 1.00G
snapof_usr 88.00M lv_usr 0.01
Normally, one would adapt this to the size of the snapped of LV and the anticipated amount of changes during the period one would possibly require the snapshot. As a rule of thumb 10% suffice, but this depends on the changes in the filesystem. Since /usr is pretty static (and even could be mounted ro often) there won't be many changes. From the lvs command above you can watch the filling up of the snapshot with the changes. Once the snap_percent approaches 100% your snapshot is useless and can't be any longer used for recoveries. Now you can safely run your command. If something goes wrong, you simply mount the snapshot volume ro somewhere and run your restore. Once you no longer need your snapshot simply lvremove it. Code:
[root@toshsat:~]
# mount -r /dev/vgfc/snapof_usr /mnt/tmp2
[root@toshsat:~]
# df /usr /mnt/tmp2
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vgfc-lv_usr
5160576 3193892 1704540 66% /usr
/dev/mapper/vgfc-snapof_usr
5160576 3193892 1704540 66% /mnt/tmp2
[root@toshsat:~]
# umount /mnt/tmp2
[root@toshsat:~]
# lvremove -f /dev/vgfc/snapof_usr
Logical volume "snapof_usr" successfully removed
Last edited by buffoonix; 09-02-2008 at 02:03 AM. |
|
#7
|
|||
|
|||
|
Quote:
sed 's/^M$//' document therefore seeing the "^M" evocated this Pavlovian reflex in me - "use of ^M must mean remove CR/LFs" and i didn't even read any further. Of course "^M" means, in the normal sense of a non-escaped character, an M at the beginning of a line like you pointed out correctly. Sigh, this comes from working in DOS/Windows-contaminated environments for too long. I probably got infected. bakunin |
|||
| Google The UNIX and Linux Forums |