Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prevent "mv" command from raising error if no file matches the glob. eg" mv *.json /dir/

Tags:

bash

shell

mv

I want to move all JSON files created within a jenkins job to a different folder.

It is possible that the job does not create any json file. In that case the mv command is raising an error and so that job is failing.

How do I prevent mv command from raising error in case no file is found?

like image 666
Avyukt Sharma Avatar asked Oct 26 '25 07:10

Avyukt Sharma


2 Answers

Loop over all json files and move each of them, if it exists, in a oneliner:

for X in *.json; do [[ -e $X ]] && mv "$X" /dir/; done
like image 109
Adrian Avatar answered Oct 28 '25 20:10

Adrian


This is expected behavior -- it's why the shell leaves *.json unexpanded when there are no matches, to allow mv to show a useful error.

If you don't want that, though, you can always check the list of files yourself, before passing it to mv. As an approach that works with all POSIX-compliant shells, not just bash:

#!/bin/sh

# using a function here gives us our own private argument list.
# that's useful because minimal POSIX sh doesn't provide arrays.
move_if_any() {
  dest=$1; shift  # shift makes the old $2 be $1, the old $3 be $2, etc.
  # so, we then check how many arguments were left after the shift;
  # if it's only one, we need to also check whether it refers to a filesystem
  # object that actually exists.
  if [ "$#" -gt 1 ] || [ -e "$1" ] || [ -L "$1" ]; then
    mv -- "$@" "$dest"
  fi
}

# put destination_directory/ in $1 where it'll be shifted off
# $2 will be either nonexistent (if we were really running in bash with nullglob set)
# ...or the name of a legitimate file or symlink, or the string '*.json'
move_if_any destination_directory/ *.json

...or, as a more bash-specific approach:

#!/bin/bash

files=( *.json )
if (( ${#files[@]} > 1 )) || [[ -e ${files[0]} || -L ${files[0]} ]]; then
  mv -- "${files[@]}" destination/
fi
like image 37
Charles Duffy Avatar answered Oct 28 '25 21:10

Charles Duffy



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!