LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (https://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   Can't delete a file .... (https://www.linuxquestions.org/questions/linux-newbie-8/cant-delete-a-file-601122/)

jimbob-2k7 11-20-2007 08:19 AM

Can't delete a file ....
 
Hi All,

I've been searching on Google for a couple of hours and have not found anything that works :cry:

I'm trying to delete a file on FC6 using WinSCP/PuTTY.

When i use WinSCP to list the image directory I get:
Unexpected directory listing line '?--------- ? ? ? ? ? a56896.jpg'.
'?' is not a valid integer value

When i list it using the command line, it shows question marks:
--wxrwxr-x 1 root root 4875 Nov 30 2006 a56884.jpg
?--------- ? ? ? ? ? a56896.jpg

If i try and delete the file using the command line i get:
rm: cannot lstat `a56896.jpg': Unknown error 990

Hope someone can help? :)

Cheers,

Jim

forrestt 11-20-2007 10:41 AM

Try making a temporary directory one level above the one you are in. Move all the files in the directory you are in except for the one with the problem to the temp directory. Change directories up one level and rm -rf the directory you were in.

Code:

mkdir ../temp-directory-123
mv a56884.jpg ../temp-directory-123
(repeat above for each file in directory EXCEPT a56896.jpg)
cd ..
rm -rf directory-you-were-in
mv temp-directory-123 directory-you-were-in

When you are done you may want to boot to single user mode and run fsck on the drive.

HTH

Forrest

jimbob-2k7 11-21-2007 06:52 AM

Hi Forrest,

Thanks for the info, one question, the directory has over 26k images, how do i move all the files except for the few with the problems?

Cheers,

Jim

forrestt 11-21-2007 10:15 AM

In the directory run "ls |wc -l" This will tell you the number of files and subdirectories in that directory. Then run "ls |grep \?|wc -l" this should tell you the number of files w/ corrupted names. There is a possibility that the questions marks aren't actually question marks and won't appear in the grep. If they don't, stop here and let me know. Next run "ls |grep -v \? |wc -l" this should tell you the number of files that DON'T have corrupted names. If the number of corrupted names looks about right, and the number of corrupted plus the number of uncorrupted is equal to the total, then:

Code:

% tcsh
% foreach FILE (`ls |grep \?`)
foreach? mv $FILE ../temp-directory-123
foreach? end
% exit

If the "tcsh" command above gives you problems, let me know and I'll give you instructions for another shell. If you are already running tcsh then you can skip the "tcsh" and "exit" above, but including them won't hurt anything.

Now, check the directory and make sure you haven't left any files that should not be deleted. If satisfied, continue with "cd .." in my previous post.

HTH

Forrest

jimbob-2k7 11-22-2007 03:14 AM

Hi Forrest,

This is what i get:

ls |wc -l
36231

ls |grep \?|wc -l
0

You said stop if i have any problems :D

Cheers,

Jim

indiancosmonaut 11-22-2007 04:45 AM

Hi Jim,

Try removing the file using:

rm -rf ./'filename'
or
rm -rf -- 'filename'

indiancosmonaut

jimbob-2k7 11-22-2007 09:09 AM

Hi indiancosmonaut,

When i try both commands i get:

rm: cannot lstat `a56896.jpg': Unknown error 990

Cheers.

jschiwal 11-22-2007 09:47 AM

Hopefully the directory is corrupt and not the filesystem. ( To the kernel, a directory is just a file )

If you use "ls -i" is the inode of the file listed?

You could use find to select the file with that inode and then delete it.
Code:

    find . -maxdepth 1 -inum <inode number> -okdir rm -f '{}' \;
By the way, I noticed that the file is owned by root. Please, please,please, don't run normally as root. There is no reason to do so in Linux.

jimbob-2k7 11-22-2007 10:32 AM

Hi jschiwal,

Thanks 4 posting,

The images that are fine have a long number next to them, but the image that is corrupt has a 0 next to it, is that bad news?

Cheers,

Jim

forrestt 11-26-2007 10:06 AM

Sorry, that should have been "ls -l" not "ls" in the commands above. And the foreach also needs to be changed to:

Code:

%tcsh
% foreach FILE (`ls -l|grep \?|awk '{print $8}'`)
foreach? mv $FILE ../temp-directory-123
foreach? end
% exit

I'm sorry it took so long to get back to you.

HTH

Forrest

colucix 11-26-2007 10:31 AM

Quote:

Originally Posted by jimbob-2k7 (Post 2967596)
The images that are fine have a long number next to them, but the image that is corrupt has a 0 next to it, is that bad news?

I don't know what exactly jschiwal had in mind, but actually an inode count equal to 0 is not a good one! When the inode number reaches 0, the file is cancelled or at least the filesystem doesn't know how to address it anymore. The message "Unknown error 990" make me think at a filesystem failure.

jimbob-2k7 12-03-2007 08:52 AM

Hi Guys,

I've found the same problem in one of my backup folders :(

When i do 'ls -l' it says total 0, then i get a list of stuff like ablow and the file names have a red background ...

?--------- ? ? ? ? ? a?2440.jpg
?--------- ? ? ? ? ? a?2489.jpg
?--------- ? ? ? ? ? a?2526.jpg
?--------- ? ? ? ? ? a?2571.jpg
?--------- ? ? ? ? ? a?2625.jpg

Once again thanks for all your help :D

Cheers,

Jim

matthewg42 12-03-2007 09:28 AM

How do you do your backups? Must be some sort of low-level backup to duplicate the corrupted directory...

jimbob-2k7 12-03-2007 09:48 AM

well when i say backups ... i mean backup :( only done one up to now (i just dump the database every day and download it). We moved from our old host about a month or so ago ...

In WinSCP i select the folder, right click and Tar/Gzip ... so im starting to think if the problem started on the other server, or maybe during the transfer.

I only discovered this problem when i was trying to do a backup.

Cheers.


All times are GMT -5. The time now is 05:42 AM.