Hi,
I have one dir which has N subdirs.For ex:
/home/user/Project_Src
/home/user/Project_Src/Dir_A
/home/user/Project_Src/Dir_A/subdir/sub_dir2
/home/user/Project_Src/Dir_A/subdir/sub_dir3
/home/user/Project_Src/Dir_B
/home/user/Project_Src/Dir_B/Build
i want to create a folder with the name "NEW" in all the dirs & subdirs under /home/user/Project_Src and perform action (rm -rf .svn) in above mentioned directories.(ie under Project_Src all dirs & subdirs) while performing action i want the directory name in which the action is performed ie echo $dirname.
Result should be with the removal of .svn in all dirs,subdirs recursively:
/home/user/Project_Src/NEW
/home/user/Project_Src/Dir_A/NEW
/home/user/Project_Src/Dir_A/subdir/sub_dir2/NEW
/home/user/Project_Src/Dir_A/subdir/sub_dir3/NEW
/home/user/Project_Src/Dir_B/NEW
/home/user/Project_Src/Dir_B/Build/NEW
i tried to use for loop similar to below mentioned thread:
I got folder only under /Project_Src. I am using bash.
Thanks for all your help.
dragon.1431:
Hi,
I have one dir which has N subdirs.For ex:
/home/user/Project_Src
/home/user/Project_Src/Dir_A
/home/user/Project_Src/Dir_A/subdir/sub_dir2
/home/user/Project_Src/Dir_A/subdir/sub_dir3
/home/user/Project_Src/Dir_B
/home/user/Project_Src/Dir_B/Build
i want to create a folder with the name "NEW" in all the dirs & subdirs under /home/user/Project_Src and perform action (rm -rf .svn) in above mentioned directories.(ie under Project_Src all dirs & subdirs) while performing action i want the directory name in which the action is performed ie echo $dirname.
Result should be with the removal of .svn in all dirs,subdirs recursively:
/home/user/Project_Src/NEW
/home/user/Project_Src/Dir_A/NEW
/home/user/Project_Src/Dir_A/subdir/sub_dir2/NEW
/home/user/Project_Src/Dir_A/subdir/sub_dir3/NEW
/home/user/Project_Src/Dir_B/NEW
/home/user/Project_Src/Dir_B/Build/NEW
...
Something like this ?
$
$
$ # show the entire file hierarchy from the root directory "Project_Src"
$ find ./Project_Src -name "*"
./Project_Src
./Project_Src/x1.svn
./Project_Src/Dir_B
./Project_Src/Dir_B/x1.svn
./Project_Src/Dir_B/Build
./Project_Src/Dir_B/Build/x1.svn
./Project_Src/Dir_B/Build/y1.txt
./Project_Src/Dir_B/y1.txt
./Project_Src/Dir_A
./Project_Src/Dir_A/x1.svn
./Project_Src/Dir_A/y1.txt
./Project_Src/Dir_A/subdir
./Project_Src/Dir_A/subdir/sub_dir2
./Project_Src/Dir_A/subdir/sub_dir2/x1.svn
./Project_Src/Dir_A/subdir/sub_dir2/y1.txt
./Project_Src/Dir_A/subdir/sub_dir3
./Project_Src/Dir_A/subdir/sub_dir3/x1.svn
./Project_Src/Dir_A/subdir/sub_dir3/y1.txt
./Project_Src/Dir_A/subdir/x1.svn
./Project_Src/Dir_A/subdir/y1.txt
./Project_Src/y1.txt
$
$ # show the content of the Bash shell script that processes
$ # all directories in "Project_Src" recursively
$ cat -n processdirs.sh
1 #!/bin/bash
2 for i in `find ./Project_Src -type d -name "*"` ; do
3 echo "Now inspecting directory : $i"
4 echo "Now removing svn files..."
5 rm $i/*.svn
6 echo "Now creating directory NEW..."
7 mkdir -p $i/NEW
8 echo "=========================================================================="
9 done
$
$
$ # now execute the script "processdirs.sh"
$ ./processdirs.sh
Now inspecting directory : ./Project_Src
Now removing svn files...
Now creating directory NEW...
==========================================================================
Now inspecting directory : ./Project_Src/Dir_B
Now removing svn files...
Now creating directory NEW...
==========================================================================
Now inspecting directory : ./Project_Src/Dir_B/Build
Now removing svn files...
Now creating directory NEW...
==========================================================================
Now inspecting directory : ./Project_Src/Dir_A
Now removing svn files...
Now creating directory NEW...
==========================================================================
Now inspecting directory : ./Project_Src/Dir_A/subdir
Now removing svn files...
Now creating directory NEW...
==========================================================================
Now inspecting directory : ./Project_Src/Dir_A/subdir/sub_dir2
Now removing svn files...
Now creating directory NEW...
==========================================================================
Now inspecting directory : ./Project_Src/Dir_A/subdir/sub_dir3
Now removing svn files...
Now creating directory NEW...
==========================================================================
$
$
$ # check the entire hierarchy tree again, to ensure that the script worked
$ find ./Project_Src -name "*"
./Project_Src
./Project_Src/Dir_B
./Project_Src/Dir_B/Build
./Project_Src/Dir_B/Build/NEW
./Project_Src/Dir_B/Build/y1.txt
./Project_Src/Dir_B/NEW
./Project_Src/Dir_B/y1.txt
./Project_Src/NEW
./Project_Src/Dir_A
./Project_Src/Dir_A/NEW
./Project_Src/Dir_A/y1.txt
./Project_Src/Dir_A/subdir
./Project_Src/Dir_A/subdir/sub_dir2
./Project_Src/Dir_A/subdir/sub_dir2/NEW
./Project_Src/Dir_A/subdir/sub_dir2/y1.txt
./Project_Src/Dir_A/subdir/sub_dir3
./Project_Src/Dir_A/subdir/sub_dir3/NEW
./Project_Src/Dir_A/subdir/sub_dir3/y1.txt
./Project_Src/Dir_A/subdir/NEW
./Project_Src/Dir_A/subdir/y1.txt
./Project_Src/y1.txt
$
$
tyler_durden
1 Like
I believe .svn are hidden directories used by subversion, not files. If so, rm without -rf won't remove them. Also, if they are directories, since they're going to be nuked, it's best to exclude them from the find traversal to avoid noisy error messages and/or pointless mkdir operations.
Perhaps this will do:
find /home/user/Project_Src -type d ! \( -name .svn -o -name NEW \) -exec sh -c '
for d; do
echo "$d"
mkdir "$d"/NEW
rm -fr "$d"/.svn
done' sh {} +
Regards,
Alister
1 Like