Какой удобный способ перемещать файлы и подкаталоги «вверх по подкаталогу» с возможным конфликтом имен?

В моей системе cat /etc/redhat-release =>. Red Hat Enterprise Linux AS release 4 (Nahant Update 6) LANG также установлен в этом файле, например, вот раздел /etc/profile.d/lang.sh

sourced=0
for langfile in /etc/sysconfig/i18n $HOME/.i18n ; do
    [ -f $langfile ] && . $langfile && sourced=1
done

if [ -n "$GDM_LANG" ]; then
    sourced=1
    LANG="$GDM_LANG"
    unset LANGUAGE
    if [ "$GDM_LANG" = "zh_CN.GB18030" ]; then
      export LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
    fi
fi
0
23.09.2018, 16:17
2 ответа
cd /var/foo/bar/baz
for src in *; do
    dest="${src}"
    suffix=0
    while [[ -e../"${dest}" ]]; do
        dest="${src}.${suffix}"
        suffix=$((suffix+1))
    done
    mv -n "$src"../"$dest"
done
cd..
rmdir baz

Довольно простое решение. Подготовьтесь к перемещению файла из текущего каталога в родительский каталог, но если файл с таким именем уже существует, добавьте суффикс с номером. Но не используйте номер, который также по какой-то причине уже существует.

Конструкция [[ -e file ]]вернет true, если что-то с именем fileсуществует, будь то каталог, сокет, обычный файл или что-то еще.

0
28.01.2020, 04:26

Это слишком длинно, но должно работать:

cd /var/foo/bar
bazbaz_tmp_file=$(mktemp baz/XXXXXXXXXXXXXX)
[[ -e baz/baz ]] && mv baz/baz $bazbaz_tmp_file
mv baz/*.
rmdir baz
mv $(basename $bazbaz_tmp_file) baz

Примечание :Это предполагает, что мы можем безопасно перемещать любые другие файлы изнутри baz/.

0
28.01.2020, 04:26

Теги

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