найдите 2 файла с аналогичными именами и переместите их в новое местоположение

Попробуйте это как/etc/fstab запись:

/path/to/device /mount/point/for/two2tbHDD ext4 umask=permissions,gid=peters_group_id,uid=peters_id 0 0

После того, как смонтированный, владение изменения:

chown peter: /mount/point/for/two2tbHDD

Затем измените использование корневого каталога peter

usermod -m -d /mount/point/for/two2tbHDD
3
15.05.2014, 10:39
3 ответа

Самый простой подход будет зависеть от того, насколько вы можете доверять своим пользователям. Если вам не нужно проверять, существуют ли оба файла, или что имена верны, или что-то еще, вам даже не нужен скрипт. Вы можете сделать это с помощью простого find :

find /dir/to/source -name "ABC*" -mmin +5 -exec mv {} /destination/dir \;

Если вам нужно убедиться, что i) оба файла присутствуют и ii) оба имеют время модификации не менее 5 минут назад в системе GNU , вы можете сделать это:

#!/usr/bin/env bash

SOURCEDIR="/dir/to/source"
DESTDIR="/destination/dir"

for f in "${SOURCEDIR}"/*.xml; do
    ## Make sure the file exists and is a regular file (or symlink to regular file),
    ## and that its modification date is at least 5 minutes ago
    [ -f "$f" ] && [ "$(( $(date +%s) - $(stat -c %Y "$f") ))" -ge 300 ] || continue

    ## Do the same for a file of the same name but with the .mxf extension.
    mxf="${SOURCEDIR}/$(basename "$f" .xml).mxf";
    [ -f "$mxf" ] && [ "$(( $(date +%s) - $(stat -c %Y "$no_ext") ))" -ge 300 ] || continue

    ## We will only get to this point if all of the above tests were successful
    echo mv -v "$f" "$mxf" "$DESTDIR"
done
2
27.01.2020, 21:19

В системе GNU:

SOURCEDIR="/dir/to/source"
DESTDIR="/destination/dir"
TIMESTAMP_MINDIFF=300

timestamp="$(date +%s)"
find "$SOURCEDIR/AutoIngest" -maxdepth 1 -type f -name 'ABC*' ! -name '*.xml' |
  while IFS= read -r file; do
    xmlfile="${file}.xml"
    test -f "$xmlfile" || continue
    ts_file="$(date --reference="$file" +%s)"
    ts_xmlfile="$(date --reference="$xmlfile" +%s)"
    if [ "$((timestamp-ts_file))" -gt "$TIMESTAMP_MINDIFF" ] &&
       [ "$((timestamp-ts_xmlfile))" -gt "$TIMESTAMP_MINDIFF" ]; then
      echo mv "$file" "$xmlfile" "$DESTDIR/"
    fi
  done

Удалите echo , если результат вам нужен.

1
27.01.2020, 21:19

С помощью zsh:

cd /dir/to/source || exit
files=(ABC*(N.mm+5))
for f ($files[(k)*.xml]) {
   (($files[(I)$f:r])) && print -r mv -v -- $f $f:r /destination/dir/
}

(удалите print -r, если хотите).

Или чтобы не вызывать mv несколько раз:

cd /dir/to/source || exit
files=(ABC*(N.mm+5))
tomove=()
for f ($files[(k)*.xml]) {
   (($files[(I)$f:r])) && tomove+=($f $f:r)
}
print -r mv -- $tomove /destination/dir/
1
27.01.2020, 21:19

Теги

Похожие вопросы