Я пробовал все вышеперечисленное безрезультатно. Затем я попробовал щелчок правой кнопкой мыши по области фильтров USB и нашел пункт меню «Добавить фильтр с устройства». Вуаля! Это сработало.
Я заметил некоторые ошибки в вашем скрипте:
Это должно привести к результату, который вы ищете:
#!/bin/bash
echo "Enter the source"
read SOURCE
echo "Enter the destination"
read DESTINATION
for file in $SOURCE/*; do
base=`basename "${file}"`
letter=${base:0:1}
case $letter in
[a-f]) echo "A-F";
if [ -d "$DESTINATION/A-F" ]; then
echo "Moving file..."
mv $file "$DESTINATION/A-F"
else
mkdir -p "$DESTINATION/A-F";
fi
;;
[g-l]) echo "G-L"
if [ -d "$DESTINATION/G-L" ]; then
echo "Moving file..."
mv $file "$DESTINATION/G-L"
else
mkdir -p "$DESTINATION/G-L"
fi
;;
[m-r]) echo "M-R"
if [ -d "$DESTINATION/M-R" ]; then
echo "Moving file..."
mv $file "$DESTINATION/M-R"
else
mkdir -p "$DESTINATION/M-R"
fi
;;
[s-z]) echo "S-Z";
if [ -d "$DESTINATION/S-Z" ]; then
echo "Moving file..."
mv $file "$DESTINATION/S-Z"
else
mkdir -p "$DESTINATION/S-Z";
fi
;;
*) echo "-"
if [ -d "$DESTINATION/-" ]; then
echo "Moving file..."
mv $file "$DESTINATION/-"
else
mkdir -p "$DESTINATION/-";
fi
esac
done
Я заметил некоторые ошибки в вашем скрипте:
Это должно привести к результату, который вы ищете:
#!/bin/bash
echo "Enter the source"
read SOURCE
echo "Enter the destination"
read DESTINATION
for file in $SOURCE/*; do
base=`basename "${file}"`
letter=${base:0:1}
case $letter in
[a-f]) echo "A-F";
if [ -d "$DESTINATION/A-F" ]; then
echo "Moving file..."
mv $file "$DESTINATION/A-F"
else
mkdir -p "$DESTINATION/A-F";
fi
;;
[g-l]) echo "G-L"
if [ -d "$DESTINATION/G-L" ]; then
echo "Moving file..."
mv $file "$DESTINATION/G-L"
else
mkdir -p "$DESTINATION/G-L"
fi
;;
[m-r]) echo "M-R"
if [ -d "$DESTINATION/M-R" ]; then
echo "Moving file..."
mv $file "$DESTINATION/M-R"
else
mkdir -p "$DESTINATION/M-R"
fi
;;
[s-z]) echo "S-Z";
if [ -d "$DESTINATION/S-Z" ]; then
echo "Moving file..."
mv $file "$DESTINATION/S-Z"
else
mkdir -p "$DESTINATION/S-Z";
fi
;;
*) echo "-"
if [ -d "$DESTINATION/-" ]; then
echo "Moving file..."
mv $file "$DESTINATION/-"
else
mkdir -p "$DESTINATION/-";
fi
esac
done
Я заметил некоторые ошибки в вашем скрипте:
Это должно привести к результату, который вы ищете:
#!/bin/bash
echo "Enter the source"
read SOURCE
echo "Enter the destination"
read DESTINATION
for file in $SOURCE/*; do
base=`basename "${file}"`
letter=${base:0:1}
case $letter in
[a-f]) echo "A-F";
if [ -d "$DESTINATION/A-F" ]; then
echo "Moving file..."
mv $file "$DESTINATION/A-F"
else
mkdir -p "$DESTINATION/A-F";
fi
;;
[g-l]) echo "G-L"
if [ -d "$DESTINATION/G-L" ]; then
echo "Moving file..."
mv $file "$DESTINATION/G-L"
else
mkdir -p "$DESTINATION/G-L"
fi
;;
[m-r]) echo "M-R"
if [ -d "$DESTINATION/M-R" ]; then
echo "Moving file..."
mv $file "$DESTINATION/M-R"
else
mkdir -p "$DESTINATION/M-R"
fi
;;
[s-z]) echo "S-Z";
if [ -d "$DESTINATION/S-Z" ]; then
echo "Moving file..."
mv $file "$DESTINATION/S-Z"
else
mkdir -p "$DESTINATION/S-Z";
fi
;;
*) echo "-"
if [ -d "$DESTINATION/-" ]; then
echo "Moving file..."
mv $file "$DESTINATION/-"
else
mkdir -p "$DESTINATION/-";
fi
esac
done
Я предлагаю сделать каталоги перед попыткой переместить файлы, а не после. Кроме того, пропустите проверку существования каталога, просто используйте
mkdir -p
Также я не думаю, что вам нужны все эти сложные условные обозначения, хотя простота в сознании наблюдателя, я думаю. Мне кажется, что-то вроде следующего.
#!/bin/bash
# repeats until you enter a valid directory
while [ ! -d "$DESTINATION_ANY_VALID_FORM" ]; do
read -p "Enter destination directory:" DESTINATION_ANY_VALID_FORM
done
# canonicalizes directory name into a standard form
DESTINATION="$(readlink -f "$DESTINATION_ANY_VALID_FORM")"
# same deal for source
while [ ! -d "$SOURCE_ANY_VALID_FORM" ]; do
read -p "Enter source directory:" SOURCE_ANY_VALID_FORM
done
SOURCE="$(readlink -f "$SOURCE_ANY_VALID_FORM")"
# makes the directories you want if they don't exist already -
# conditionals aren't needed.
mkdir -p $DESTINATION/A-F
mkdir -p $DESTINATION/G-L
mkdir -p $DESTINATION/M-R
mkdir -p $DESTINATION/S-Z
mkdir -p $DESTINATION/#
# And then move the files any way you want. There must eleventy-twelve ways.
# I was wrong thinking wildcards would be easy.
# That is actually kind of hard.
# The following is easy to write and understand, but there are more efficient ways.
ls -w1 "$SOURCE" | grep ^[a-f,A-F] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/A-F" "$SOURCE/$FILE"
done
ls -w1 "$SOURCE" | grep ^[g-l,G-L] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/G-L" "$SOURCE/$FILE"
done
ls -w1 "$SOURCE" | grep ^[m-r,M-R] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/M-R" "$SOURCE/$FILE"
done
ls -w1 "$SOURCE" | grep ^[s-z,S-Z] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/S-Z" "$SOURCE/$FILE"
done
ls -w1 "$SOURCE" | grep ^[0-9] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/#" "$SOURCE/$FILE"
done
версия для пасты: https://paste.ubuntu.com/24540558/
Я предлагаю сделать каталоги перед попыткой переместить файлы, а не после. Кроме того, пропустите проверку существования каталога, просто используйте
mkdir -p
Также я не думаю, что вам нужны все эти сложные условные обозначения, хотя простота в сознании наблюдателя, я думаю. Мне кажется, что-то вроде следующего.
#!/bin/bash
# repeats until you enter a valid directory
while [ ! -d "$DESTINATION_ANY_VALID_FORM" ]; do
read -p "Enter destination directory:" DESTINATION_ANY_VALID_FORM
done
# canonicalizes directory name into a standard form
DESTINATION="$(readlink -f "$DESTINATION_ANY_VALID_FORM")"
# same deal for source
while [ ! -d "$SOURCE_ANY_VALID_FORM" ]; do
read -p "Enter source directory:" SOURCE_ANY_VALID_FORM
done
SOURCE="$(readlink -f "$SOURCE_ANY_VALID_FORM")"
# makes the directories you want if they don't exist already -
# conditionals aren't needed.
mkdir -p $DESTINATION/A-F
mkdir -p $DESTINATION/G-L
mkdir -p $DESTINATION/M-R
mkdir -p $DESTINATION/S-Z
mkdir -p $DESTINATION/#
# And then move the files any way you want. There must eleventy-twelve ways.
# I was wrong thinking wildcards would be easy.
# That is actually kind of hard.
# The following is easy to write and understand, but there are more efficient ways.
ls -w1 "$SOURCE" | grep ^[a-f,A-F] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/A-F" "$SOURCE/$FILE"
done
ls -w1 "$SOURCE" | grep ^[g-l,G-L] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/G-L" "$SOURCE/$FILE"
done
ls -w1 "$SOURCE" | grep ^[m-r,M-R] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/M-R" "$SOURCE/$FILE"
done
ls -w1 "$SOURCE" | grep ^[s-z,S-Z] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/S-Z" "$SOURCE/$FILE"
done
ls -w1 "$SOURCE" | grep ^[0-9] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/#" "$SOURCE/$FILE"
done
версия для пасты: https://paste.ubuntu.com/24540558/
Я предлагаю сделать каталоги перед попыткой переместить файлы, а не после. Кроме того, пропустите проверку существования каталога, просто используйте
mkdir -p
Также я не думаю, что вам нужны все эти сложные условные обозначения, хотя простота в сознании наблюдателя, я думаю. Мне кажется, что-то вроде следующего.
#!/bin/bash
# repeats until you enter a valid directory
while [ ! -d "$DESTINATION_ANY_VALID_FORM" ]; do
read -p "Enter destination directory:" DESTINATION_ANY_VALID_FORM
done
# canonicalizes directory name into a standard form
DESTINATION="$(readlink -f "$DESTINATION_ANY_VALID_FORM")"
# same deal for source
while [ ! -d "$SOURCE_ANY_VALID_FORM" ]; do
read -p "Enter source directory:" SOURCE_ANY_VALID_FORM
done
SOURCE="$(readlink -f "$SOURCE_ANY_VALID_FORM")"
# makes the directories you want if they don't exist already -
# conditionals aren't needed.
mkdir -p $DESTINATION/A-F
mkdir -p $DESTINATION/G-L
mkdir -p $DESTINATION/M-R
mkdir -p $DESTINATION/S-Z
mkdir -p $DESTINATION/#
# And then move the files any way you want. There must eleventy-twelve ways.
# I was wrong thinking wildcards would be easy.
# That is actually kind of hard.
# The following is easy to write and understand, but there are more efficient ways.
ls -w1 "$SOURCE" | grep ^[a-f,A-F] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/A-F" "$SOURCE/$FILE"
done
ls -w1 "$SOURCE" | grep ^[g-l,G-L] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/G-L" "$SOURCE/$FILE"
done
ls -w1 "$SOURCE" | grep ^[m-r,M-R] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/M-R" "$SOURCE/$FILE"
done
ls -w1 "$SOURCE" | grep ^[s-z,S-Z] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/S-Z" "$SOURCE/$FILE"
done
ls -w1 "$SOURCE" | grep ^[0-9] | while read FILE ; do
mv --verbose --backup --target-directory="$DESTINATION/#" "$SOURCE/$FILE"
done
версия для пасты: https://paste.ubuntu.com/24540558/