$ nmcli con add type wifi ifname wlps3s0 master bond0 ssid $YOURSSID
Да, нет простого способа надежно проанализировать вывод ls
.
Здесь вы можете использовать zsh
вместо:
#! /bin/zsh -
zmodload zsh/stat || exit
typeset -A size_to_name
model_folder=${1?}
for f in $model_folder/*(ND.); do
stat -LA size +size -- $f &&
size_to_name[$size]=$f:t &&
print -r "# File of size $size should be named ${(q)f:t}"
done
for f in *(ND.); do
stat -LA size +size -- $f &&
(($+size_to_name[$size])) &&
[[ $f != $size_to_name[$size] ]] &&
print -r mv -i -- ${(qq)f} ${(qq)size_to_name[$size]}
done
(для запуска какthat-script /model-folder-path
)
Что должно работать правильно, независимо от того, какие символы или не -символы могут содержать имена файлов.
Передайте на sh
, как только вы убедитесь, что это правильно. Обратите внимание, что мы не проверяем случай, когда два файла имеют одинаковый размер. В этом случае будет выбран последний в лексическом порядке (, если a
и z
оба имеют размер 42 в папке модели _, тогда любой файл размера 42 будет переименован в z
в папке модели. текущая папка (, хотя -i
даст вам возможность избежать перезаписи первой второй )).
Будет точнее использовать контрольные суммы для идентификации идентичных файлов между двумя каталогами :с bash 4.3+ вы можете сделать
getFiles() {
local -n _files=$1
local dir=${2:-.}
cd "$dir"
for file in *; do
[[ -d $file ]] && continue
read sum name < <(md5sum "$file")
_files[$sum]="$file"
done
cd -
}
declare -A pwdFiles
getFiles pwdFiles
declare -A modelFiles
getFiles modelFiles /model-folder-path
for sum in "${!pwdFiles[@]}"; do
if [[ -v modelFiles[$sum] ]]; then
mv -v "${pwdFiles[$sum]}" "${modelFiles[$sum]}"
fi
done
Предполагая, что это будет разовая -операция по исправлению предыдущей ошибки в переименовании, что не так с простым diff, что-то вроде (непроверенного):
for newfile in *; do
for oldpath in /model-folder-path/*; do
if ! diff -q "$oldpath" "$newfile" >/dev/null; then
oldfile=${oldpath##*/}
if [[ "$oldfile" != "$newfile" ]]; then
if [[ -f "$oldfile" ]]; then
echo "clash on $oldfile" >&2
exit 1
fi
mv -- "$newfile" "$oldfile"
fi
fi
done
done