При наличии нескольких расширений для пункта назначения вы можете добавить больше логики в директивы find
:
find ~/Downloads -maxdepth 1 \( -name "*.tar.gz" -o -name "*.zip" \) -print0 | xargs -0 -I % mv % ~/Downloads/archives/
И вам не нужно подключаться к xargs:
find ~/Downloads -maxdepth 1 \( -name "*.tar.gz" -o -name "*.zip" \) -exec mv -t ~/Downloads/archives/ {} +
Поскольку у вас есть -maxdepth 1
, вам действительно нужно find
?
shopt -s nullglob
cd ~/Downloads
mv -t archives/ *.tar.gz *.zip
mv -t Pictures/ *.jpg *.png *.tiff
# etc
Этот подход будет выдавать некоторые ошибки, если нет файлов для перемещения. Вы можете обойти это с помощью чего-то вроде:
shopt -s nullglob
movefiles() {
local dest=$1
shift
if (( $# > 0 )); then
mkdir -p "$dest"
mv -t "$dest" "$@"
fi
}
cd ~/Downloads
movefiles PDF/ *.pdf
movefiles OPM/ *.opm
movefiles YML/ *.yml
movefiles CSS/ *.css
movefiles archives/ *.zip *.tar.gz
movefiles Pictures/ *.jpg *.png *.tiff
movefiles Perl/ *.pm
movefiles Excel/ *.xls*
movefiles Word/ *.doc*
Примечания:
movefiles PDF/ "*.pdf"
movefiles PDF/
Scanimage
такой возможности нет.
С помощью простой функции bash
вы можете передать первому enter
сообщение echo
и дождаться ввода другого с помощью cat
. Вот что
echo;cat
да. Вы можете проверить это с помощью:
(echo;cat)|sed 's/^/START/;s/$/END/'
Таким образом, это подается в STDIN
из scanimage
.