Home > Blockchain >  How to use xargs rm command to exclude directory
How to use xargs rm command to exclude directory

Time:11-03

I have to write a shell script so that it should remove all the files except test.txt When I run the script, it says Removal of Source file failed because dev_data is a directory.

ls | grep -v 'test.txt' | xargs rm

I want to write a shell script so that if there is a directory in the below path, it should skip the directory. The script should remove only the files inside the directory - dev_data

Error Log is given below:

ig_dir.sh process starts at: 
Wed Nov 2 08:08:09 IST 2022

tar: Removing leading `/' from member names
/alb/albt_shard/alb1/path1/path2/alb1/sub/alby/
/alb/albt_shard/alb1/path1/path2/alb1/sub/alby/dev_data/
/alb/albt_shard/alb1/path1/path2/alb1/sub/alby/dev_data/list_file.place.txt
rm: cannot remove ‘dev_data’: Is a directory
ig_dir.sh: Removal of Source file failed

This is how I'm passing the parameter -- sh -x ig_dir.sh.sh /alb/albt_shard/alb1/path1/path2/alb1/sub/alby.. So when I pass this as argument to the script, it checks for the directory under alby and gives --- rm: cannot remove ‘dev_data’: Is a directory

CodePudding user response:

"The script should remove only the files inside the directory - dev_data"

find dev_data -maxdepth 1 -type f ! -name test.txt -delete
  • Specify your starting point as dev_data
  • -maxdepth 1 ensures it will not descend in dev_data sub-directories
  • ! -name test.txt ignores files named test.txt (the ! is "not")
  • you can add -print to get a list of deleted files
  • Related