i have Folders I want something to change the Folders names
nameFolders
nameFolders
nameFolders
nameFolders
i want to change the names of Folders to the serial numbers
1nameFolders
2nameFolders
3nameFolders
4nameFolders
Welcome to stackoverflow, please read: How to create a Minimal, Complete, and Verifiable example.
There is no explicit command for renaming files, however mv can be used to acomplish same goal, you could write mv file1 file1_renamed and rename file1 into file1_renamed.
Related
I have files in directories like:
./PBMCs/SRR1_1.fastq
./PBMCs/SRR1_2.fastq
./Monos/SRR2.fastq
./Monos/SRR3.fastq
I want to change the SRR# to a more informative name based on a file of key-value pairs:
SRR1 pbmc-1
SRR2 mono-1
SRR3 mono-2
And rename the files as:
./PBMCs/pbmc-1_1.fastq
./PBMCs/pbmc-1_2.fastq
./Monos/mono-1.fastq
./Monos/mono-2.fastq
All that I can think to do is loop through the list of original files and then loop through the lines of the name-change.txt file and replace the strings. However, I'm not sure how to implement this or if it's a good way to approach this.
Assuming all *.fastq are one subdirectory deep, this should work fine:
while read old new; do
for fastq in ./*/"$old"*.fastq; do
new_name=$new${fastq##*/"$old"}
echo mv "$fastq" "${fastq%/*}/$new_name"
done
done <name-change.txt
Remove echo if the output looks good.
I need to combine all the csv files in some directory (.csv), provided that there are other files with the same name in this directory, but with different expansion (.csv.done).
If a csv file doesn't have .done in this extension then I don't need it for combine process.
What is the best way to do it using Bash ?
This approach is a solution to your problem. I see you've commented that it "didn't work", but whatever the reason is for it not working, it's likely simple to fix e.g. if you forgot to include key details, or failed to adapt it appropriately to suit your specific situation. If you need further help troubleshooting, add more info to your question.
The approach:
for f in *.csv.done
do
cat "${f%.*}" >> combined_file.csv
done
How it works:
In your example, you have 3 files named 1.csv 2.csv 3.csv and two 'done' files named 1.csv.done 2.csv.done.
This script begins by making a list of all files that end in .csv.done (two files: 1.csv.done 2.csv.done).
It then uses a parameter expansion, specifically ${parameter%word}, to 'shorten' the name of the two files in the list to .csv (instead of .csv.done).
Then it 'prints' the content of the two 'shortened' filenames (1.csv and 2.csv) into a 'combined' file.
It doesn't 'print' the content of 1.csv.done or 2.csv.done, or 3.csv, because these files weren't in the original 'list'.
If you run this script multiple times, it will keep adding the contents of files 1.csv and 2.csv to the 'combined' file (only run it once, or delete the 'combined' file before running it again)
i want to rename different files in bash with pattern and found this option:
rename 's/.2007/(2007)/g' *.*
with this pattern I can rename every file with ".2007" in name to "(2007)"
--> this is exactly what i want to do.
Next step:
i want to automate this, because i have files with 1995 - 2017. It is a possibility to do:
rename 's/.2007/(2007)/g' *.*
rename 's/.2008/(2008)/g' *.*
rename 's/.2009/(2009)/g' *.*
etc.
but actually, is there another solution?
my files are named like (they are not the same length...):
FILENAME.ANOTHERFILENAME.2007.jpg
FILENAME.2007.jpg
FILENAME.ANOTHERFILENAME.SOMETIMESONEMORE.2007.jpg
With Perl‘s rename:
rename -n 's/.([1-2][0-9]{3})/($1)/' *.*
This renames all files with 1000 to 2999. If everything looks fine remove -n.
For the use-cases where it's not so much about automation but rather about batch processing of a set of files, I find renameutils and its qmv ("quick move") very useful: it enables you to edit the target filenames in a text editor which may be easier/faster than designing regex's for some.
https://www.nongnu.org/renameutils/ (it's in *buntu repos)
But for applications that need to run w/o human intervention, rename is certainly more suitable.
I have a huge list of files, they came through different processes, so for some reason the ones in the first folder are numbered like this
A9.txt A1.txt while the ones in the other have A00009.txt A.00001.txt
I have no more than 99837 files so only four "extra" 0 on one side.
I need to rename all the files inside one folder so the names matches. Is there any way to do this in a loop? Thanks for the help.
You should take a look at perl-rename (Sometimes called rename) Not to be confused with rename from util-linux.
perl-rename 's/\d+/sprintf("%05d", $&)/e' *.txt
The above script will rename all .txt files in a directory to the following:
A1.txt -> A00001.txt
A10.txt -> A00010.txt
Hello225.txt -> Hello00225.txt
Test it Online
My websites file structure has gotten very messy over the years from uploading random files to test different things out. I have a list of all my files such as this:
file1.html
another.html
otherstuff.php
cool.jpg
whatsthisdo.js
hmmmm.js
Is there any way I can input my list of files via command line and search the contents of all the other files on my website and output a list of the files that aren't mentioned anywhere on my other files?
For example, if cool.jpg and hmmmm.js weren't mentioned in any of my other files then it could output them in a list like this:
cool.jpg
hmmmm.js
And then any of those other files mentioned above aren't listed because they are mentioned somewhere in another file. Note: I don't want it to just automatically delete the unused files, I'll do that manually.
Also, of course I have multiple folders so it will need to search recursively from my current location and output all the unused (unreferenced) files.
I'm thinking command line would be the fastest/easiest way, unless someone knows of another. Thanks in advance for any help that you guys can be!
Yep! This is pretty easy to do with grep. In this case, you would run a command like:
$ for orphan in `cat orphans.txt`; do \
echo "Checking for presence of ${orphan} in present directory..." ;
grep -rl $orphan . ; done
And orphans.txt would look like your list of files above, one file per line. You can add -i to the grep above if you want to grep case-insensitively. And you would want to run that command in /var/www or wherever your distribution keeps its webroots. If, after you see the above "Checking for..." and no matches below, you haven't got any files matching that name.