Link multiple files from different subfolder to a new subfolder

Hi,

I have the following subfolder with files:

/data/a/1/xxx.txt
/data/b/2/yyy.txt
/data/c/3/zzz.txt

And i have a set of new folders which have exactly the same structure as above but different disk without the files:

/data_02/a/1/
/data_02/b/2/
/data_02/c/3/

Now i would like to have a command that i can do a soft link (ln -s) for all files to the respective directory like below:

/data_02/a/1/xxx.txt -> /data/a/1/xxx.txt
/data_02/b/2/yyy.txt ->/data/b/2/yyy.txt
/data_02/c/3/zzz.txt ->/data/c/3/zzz.txt

Please advice.

for i in `find /data/ -type f -name "*.txt"`
do
  #remove parent directory
  subDirPath=nawk -F"/" '{for(i=1;i<=NF;i++)printf("%s/",$i)}'
  echo $subDirPath
  #check the command before create link
  echo "ln -s $i /data_02/$subDirPath"
  #ln -s $i /data_02/$subDirPath
done
[mute@geek ~/links]$ find . -type f | { while read F; do echo ln -s /data/${F#./} /data_02/${F#./}; done }
ln -s /data/b/2/yyy.txt /data_02/b/2/yyy.txt
ln -s /data/a/1/xxx.txt /data_02/a/1/xxx.txt
ln -s /data/c/3/zzz.txt /data_02/c/3/zzz.txt

I try to use your command but i got error.

[j0345619@x-kul-012 PROFILS]$ find . -type f | { while read F; do echo ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/${F#./} /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS/${F#./}; done }
Missing }.
[j0345619@x-kul-012 PROFILS]$

Please advice

---------- Post updated at 12:04 PM ---------- Previous update was at 11:57 AM ----------

Hi Raj,

Thanks for your reply. But i got the error when running your script.

ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-252/SEISMIC/CE93                                                                                                -252.Mig_4ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS/
./link_files: line 4: -F/: No such file or directory
ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-248/SEISMIC/CE93                                                                                                -248.Mig_4ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS/
./link_files: line 4: -F/: No such file or directory

ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-248/SEISMIC/CE93                                                                                                -248.Mig_2ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS/
./link_files: line 4: -F/: No such file or directory

ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-266/SEISMIC/CE93                                                                                                -266.Mig_4ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS/
./link_files: line 4: -F/: No such file or directory

ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-263/SEISMIC/CE93                                                                                                -263.Mig_4ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS/
./link_files: line 4: -F/: No such file or directory

ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-263/SEISMIC/CE93                                                                                                -263.Mig_2ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS/

The real directory structure is like below:

/data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-240/SEISMIC/CE93-240.Mig_4ms.xt

/data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-243/SEISMIC/CE93-243.Mig_2ms.xt

I want to link all the .xt files to :

/data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS/CE93-240/SEISMIC

/data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS/CE93-243/SEISMIC

Please advice

ok, just execute the below command and show some result.

 
find /data_drobo/ -type f -name "*.txt"

---------- Post updated at 02:53 PM ---------- Previous update was at 02:47 PM ----------

execute this.. and let me know.. not tested

 
for i in `find /data_drobo/ -type f -name "*.txt"`
do
  #remove parent directory
  subDirPath=`echo $i | nawk -F"\/" '{for(i=1;i<=NF;i++)printf("%s/",$i)}'`
  echo $subDirPath
  #check the command before create link
  echo "ln -s $i /data/archive_data02/$subDirPath"
  #ln -s $i /data_02/$subDirPath
done

Hi Kamaraj,

I have edited a bit of your script base on the directory. Firstly i got the message "nawk: command not found", so i change teh script to awk.But i still run without success.

Below is the script that i run:

for i in `find /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/ -type f -name "*.txt"`
do
  #remove parent directory
  subDirPath=`echo $i | awk -F"\/" '{for(i=1;i<=NF;i++)printf("%s/",$i)}'`
  echo $subDirPath
  #check the command before create link
  echo "ln -s $i /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS/$subDirPath"
  #ln -s $i /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS/$subDirPath
done

And below is the error that i got when running the script above:

awk: warning: escape sequence `\/' treated as plain `/'
/data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-246A/SEISMIC/CE93-246A.Mig_2ms.xt/
ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-246A/SEISMIC/CE93-246A.Mig_2ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS//data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-246A/SEISMIC/CE93-246A.Mig_2ms.xt/
awk: warning: escape sequence `\/' treated as plain `/'
/data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-246A/SEISMIC/CE93-246A.Mig_4ms.xt/
ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-246A/SEISMIC/CE93-246A.Mig_4ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS//data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-246A/SEISMIC/CE93-246A.Mig_4ms.xt/
awk: warning: escape sequence `\/' treated as plain `/'
/data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-260/SEISMIC/CE93-260.Mig_4ms.xt/
ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-260/SEISMIC/CE93-260.Mig_4ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS//data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-260/SEISMIC/CE93-260.Mig_4ms.xt/
awk: warning: escape sequence `\/' treated as plain `/'
/data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-250/SEISMIC/CE93-250.Mig_4ms.xt/
ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-250/SEISMIC/CE93-250.Mig_4ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS//data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-250/SEISMIC/CE93-250.Mig_4ms.xt/
awk: warning: escape sequence `\/' treated as plain `/'
/data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-250/SEISMIC/CE93-250.Mig_2ms.xt/
ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-250/SEISMIC/CE93-250.Mig_2ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS//data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-250/SEISMIC/CE93-250.Mig_2ms.xt/
awk: warning: escape sequence `\/' treated as plain `/'
/data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-262/SEISMIC/CE93-262.Mig_4ms.xt/
ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-262/SEISMIC/CE93-262.Mig_4ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS//data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-262/SEISMIC/CE93-262.Mig_4ms.xt/
awk: warning: escape sequence `\/' treated as plain `/'
/data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-262/SEISMIC/CE93-262.Mig_2ms.xt/
ln -s /data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-262/SEISMIC/CE93-262.Mig_2ms.xt /data/archive_data02/MALAY_BASIN_INTERP/DATA/2D/CE93/PROFILS//data_drobo/MY_MALAY_BASIN_2011/DATA/2D/CE93/PROFILS/CE93-262/SEISMIC/CE93-262.Mig_2ms.xt/
awk: warning: escape sequence `\/' treated as plain `/'

Please advice.

Kamaraj,

Could you please help me on this problem....

Please advice.

Thanks,
Siew Fong