Hi, I have around 500 directories, and I wish to first create an empty text file within each of these and then process my data files contained within sub-directories and redirect the output into the respective text files.
An example of my existing folders - exisiting/main/sub1/sub2/sub3/sub4/sub5/sub6/data.tsv.bz2
What I wish to do - create main/sub1.txt
& extract data.tsv.bz2 > main/sub1.txt
I have figured how to redirect my output into the desired files, but I am facing issues with creating the .txt
files.
Tha command tried for the same is for i in */; do touch $i.txt; done
. This creates a file named .txt
within the main folder. So I also tried for i in */ ; do cd "$i"; for j in */; do ( touch $j.vcf ) done; done
, which gave me an error saying
bash: cd: main/: No such file or directory
Since I have typed the command from my existing
directory, it first identifies the main
directory. I want to be able to provide the name of the sub1
directory while creating sub1.txt
Is there any way to get around this problem?
Thanks in advance
You didn't mention where the sub directories are. Here is the solution to OP problem:
As mentioned by @cpad0112 The problem statement is not very clear.
Probable solution
Thank you both for your response. I am sorry that my problem was not very clear. I am working from the directory named
existing/
, which contains subdirectories such asmain/sub1/sub2/sub3/sub4/sub5/sub6/
.sub6/
contains the filedata.tsv.bz2
. I wish to create a file calledsub1.txt
in themain/
directory. Technically, I would have saidtouch main/sub1.txt
, but since I have 500 directories, say for examplemain1/
,main2/
,main13/
,main27/
etc, I wish to do this using afor loop
such asfor i in */ ; do cd "$i"; for j in */; do ( touch $j.vcf ) done; done
. Here, I tried to identifymain/
with$i
andsub1/
with$j
is
sub1/sub2/sub3/sub4/sub5/sub6/
a fixed string? As I understand, main is not (main 1..main 500). It would help if you could post directory tree.Starting from the directory
existing/
├── main/
│ └── sub1/
│ └── sub2/
│ └── sub3/
│ └── sub4/
│ └── sub5/
| └── sub6/
| └── data.tsv.bz2
Since OP information is incomplete, the best you can do is:
output should look like this. Bash command above dry-runs the code:
Dry run with parallel:
This works fine. Thanks a lot. You may move it to an answer so that I can accept it. Thank you once again :)
So, will this extract
data.tsv.bz2
intosub1.txt
?I would also like to know if I can create files with
touch
in the way I mentioned in the post?Thanks once again.
Take a back up of one file and run one command from the dry-run on the backed-up directory/file. you would know if it works or not.