В моей системе 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
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
существует, будь то каталог, сокет, обычный файл или что-то еще.
Это слишком длинно, но должно работать:
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/
.