Add filenames to top of each files in a directory


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Add filenames to top of each files in a directory
# 1  
Old 05-18-2017
[sorted out] Add filenames to top of each files in a directory

Hello,

I tried different solutions given in various linux portals but no luck..

The directory consists of files with no-extension.
Each file has only one line. I need to add each filename to the top of each file so eventually each file will have two rows.
Filenames have spaces between words and some files have multiple spaces at the end of their names.


At first I tried this one:

Code:
while read F ; do
grep sed  -i '1i $F' $F > $F.txt
done


Also below one is not working:


Code:
for filename in $(ls $*)
do
	sed "1s/^/${filename} \n/" ${filename} > $filename.txt 
	echo Done ${filename} 
done

sleep 2


Any help will be appreciated

Kind regards
Boris

Last edited by baris35; 05-18-2017 at 01:08 PM.. Reason: [sorted out]
# 2  
Old 05-18-2017
Hello baris35,

Could you please try following(I haven't tested it though).
Code:
for file in *
do
    awk 'NR==1{print FILENAME} 1' $file > $file".tmp"
    mv $file".tmp" $file
done

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 3  
Old 05-18-2017
for FILE in `ls *` is a dangerous use of backticks and pointless besides, don't do that. * does not need ls or any other external command's help to work.

You can do this with a subshell, which first prints the file name, then reads out the file contents, with the entire subshell's output dumped into "$FILE".txt

Code:
for FILE in *
do
        ( echo "$FILE" ; cat "$FILE" ) < "$FILE" > "$FILE".txt
done

This User Gave Thanks to Corona688 For This Post:
# 4  
Old 05-18-2017
Hello Ravinder,
Thanks for your answer,
it gives error for some reason:

Code:
line 5: $file".tmp": ambiguous redirect

Hello Corona,
Thanks for the answer, that is working as expected.


Many Thanks!
Boris
# 5  
Old 05-18-2017
Quote:
Originally Posted by baris35
Hello Ravinder,
Thanks for your answer,
it gives error for some reason:
Code:
line 5: $file".tmp": ambiguous redirect

Hello Corona,
Thanks for the answer, that is working as expected.
Many Thanks!
Boris
Hello baris35,

Not sure about it, could you please check following and let me know if this helps you.(I tested now previous code and it worked fine for me)
Code:
for file in *
do
    awk 'NR==1{print FILENAME} 1' $file > "$file.tmp"
    mv "$file.tmp" $file
done

Thanks,
R. Singh
# 6  
Old 05-18-2017
Hello Ravinder,

Here is the output:

Code:
awk: cannot open #EXTINF:0,DE: (No such file or directory)
mv: target ‘CY’ is not a directory
awk: cannot open #EXTINF:0,DE: (No such file or directory)
mv: target ‘.txt’ is not a directory
awk: cannot open #EXTINF:0,DE: (No such file or directory)
mv: target ‘.txt’ is not a directory

Kind regards
Boris
# 7  
Old 05-18-2017
You cannot possibly have been running the code he gave you.

Show exactly what you did please, word for word, letter for letter, keystroke for keystroke.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How do I custom sort the files in a directory using the filenames in a text file.?

Hi all, (5 Replies)
Discussion started by: KMusunuru
5 Replies

2. Shell Programming and Scripting

There are multiple filenames in the directory.How to return the the lastest files for each file name

there are mutiple file nams in the directory. How to return the the lastest files for each file name. ex. abc1234_050201 abc1234_050206 abc1234_050208 xyz34_050204 xyz34_050210 xyz34_050218 thanks (4 Replies)
Discussion started by: grand_sam
4 Replies

3. Shell Programming and Scripting

Printing filenames in my current directory

Can someone give me a tip on writing a script that, for each file in the working directory, prints the filename, the # of lines, and the # of words to stdout? (2 Replies)
Discussion started by: flash123
2 Replies

4. Shell Programming and Scripting

[awk] print all filenames in directory

Hello, I was given a (I suppose) a simple task which I don't know how to do. Before coming here I have read a dozen of awk tutorials (full read, not just line-skipping) but I still don't know how to do this. Task: Write an script file 'check.awk' with a parameter current directory that... (5 Replies)
Discussion started by: c0dehunter
5 Replies

5. UNIX for Dummies Questions & Answers

Filenames change in a directory

Hi I have abc_ahb_one.v abc_ahb_two.v abc_ahb_three.v ........l like this -----upto abc_ahb_ninety.v in some directory. I need to change those file names to like below. ... (5 Replies)
Discussion started by: praneethk
5 Replies

6. Shell Programming and Scripting

Use filenames to create directory.

I have many files similar to this one: AC41_AC85_86_AC128_129_MC171_173_SF_207_FMV.pdf. I want a directory named AC41 and to put the file AC41_AC85_86_AC128_129_MC171_173_SF_207_FMV.pdf into the directory. Next, a directory named AC85 and put the file into it. Also, continue to cycle through... (1 Reply)
Discussion started by: ndnkyd
1 Replies

7. Shell Programming and Scripting

Adding characters at the top of all files in directory

Hi Unix experts; I have 30000 files in a directory and am willing to do the following changes on each of them. The input files look like the following: 1 , 2 3 , 4 5 , 6 7 , 8 9 , 10 the output will have # in top 10 lines, insert space instead of comma. This looks like: ... (4 Replies)
Discussion started by: nxp
4 Replies

8. Shell Programming and Scripting

Change all filenames in a directory

I have a directory of files and each file has a random 5 digit string at the beginning that needs to be removed. Plus, there are some files that will be identically named after the 5 digit string is removed and I want those eliminated or moved. any ideas? (17 Replies)
Discussion started by: crumb
17 Replies

9. Shell Programming and Scripting

concatenating the filenames in a directory

hi all, I have a requirement where in i have to read all the filenames based on a pattern from a directory and concatenate all these file names and write it to another file. i am using the following code to do this var1='' for filename in $_DIR/${FILE_NAME}* do if if then... (7 Replies)
Discussion started by: nvuradi
7 Replies

10. Shell Programming and Scripting

looping thru filenames in a directory

Hi, i am very new to UNIX, i am trying to loop thru the files in a directory. I got the filenames into a variable using $files=`ls` Here $files will contain <filename1> <filename2> <filename3> I want to get one filename at a time and append it to some some text. forexample, ... (1 Reply)
Discussion started by: silas.john
1 Replies
Login or Register to Ask a Question