Обмен именами файлов и каталогов

НЕТ «официальных» драйверов LINUX для серии AMD Ryzen 2xxxG - хотя, как и их предыдущие APU, вы могли бы использовать iGPU для работы OpenCL, хотя драйверы специально не поддерживают этот iGPU. 0]

Все остальное на этом этапе будет в лучшем случае ОЧЕНЬ, если в лучшем случае.

2
задан 28 February 2018 в 07:54

9 ответов

Что-то вроде этого должно работать (обратите внимание, что у меня есть echo правильные команды, пожалуйста, внимательно проверьте, что он делает правильную вещь, прежде чем удалять их)

#!/bin/bash

shopt -s nullglob

for file in */fixed/path/*; do 
  [[ -f "$file" ]] || continue
  f="${file##*/}"; d="${file%%/*}"
  echo mkdir -p "$f" && echo mv --no-clobber -- "$file" "$f/$d"
done
4
ответ дан 22 May 2018 в 12:51
  • 1
    Это сработало отлично, как только я переключился с тире на bash. Благодаря! – Charles 28 February 2018 в 08:42
  • 2
    @Charles oops sorry Мне следовало бы упомянуть, что [[ ... ]] в частности является bash-специфическим, хотя в этом контексте [ ... ] должен работать в любой оболочке – steeldriver 28 February 2018 в 08:51
  • 3
    Не беспокойтесь, я виноват, что не указал. :) – Charles 28 February 2018 в 08:52

Что-то вроде этого должно работать (обратите внимание, что у меня есть echo правильные команды, пожалуйста, внимательно проверьте, что он делает правильную вещь, прежде чем удалять их)

#!/bin/bash shopt -s nullglob for file in */fixed/path/*; do [[ -f "$file" ]] || continue f="${file##*/}"; d="${file%%/*}" echo mkdir -p "$f" && echo mv --no-clobber -- "$file" "$f/$d" done
4
ответ дан 17 July 2018 в 19:50

Что-то вроде этого должно работать (обратите внимание, что у меня есть echo правильные команды, пожалуйста, внимательно проверьте, что он делает правильную вещь, прежде чем удалять их)

#!/bin/bash shopt -s nullglob for file in */fixed/path/*; do [[ -f "$file" ]] || continue f="${file##*/}"; d="${file%%/*}" echo mkdir -p "$f" && echo mv --no-clobber -- "$file" "$f/$d" done
4
ответ дан 23 July 2018 в 20:35

Я предполагаю, что шаблон для пути всегда ./date-and-time/fixed/path/filename с переменной date-and-time и filename.

date-and-time может быть извлечен через awk:

[ f1]

filename немного легче получить, поскольку его можно извлечь из basename:

$ basename ./date-and-time/fixed/path/filename
filename

. Из этих двух сегментов кода выполняется непроверенный сценарий для перемещения файлов в который вы описываете при выполнении в .. Пожалуйста, проверьте его перед использованием.

#!/bin/bash

for i in ./*/fixed/path/*; do
    date_and_time=$(echo "$i" |awk -F "/" '{print $2}');
    filename=$(basename "$i");
    mkdir "$filename";
    mv "$i" "$filename"/"$date_and_time";
done;
2
ответ дан 22 May 2018 в 12:51

Вот так:

mkdir ./filename/ && mv ./date-and-time/path/to/path-to-your-folder/* ./filename/date-and-time

Edit:

Если вам нужно создать больше папок, я рекомендую сделать скрипт примерно так:

Перед вами start, я действительно рекомендую вам создать резервную копию папки, в которой вы пытаетесь сделать это.

cd в папку, в которую вы пытаетесь работать, а затем:

for file in *; do
  if [[ -f "$file" ]]; then
    mkdir "${file%.*}"
    mv "$file" "${file%.*}"
  fi
done
Loop над всеми (*) файлами в текущей папке. создайте папку (mkdir) из файла без расширения $ {file%. *} переместите (mv) файл в эту папку.
0
ответ дан 22 May 2018 в 12:51
  • 1
    Я надеялся на решение, которое мне не нужно вводить 1000 раз с разными путями и именами файлов. – Charles 28 February 2018 в 07:45
  • 2
    У вас 1000 папок? Вы всегда можете использовать * или вам нужно создать также 1000 новых каталогов? – An0n 28 February 2018 в 07:48
  • 3
    Затем я рекомендую использовать скрипт. Отредактировал мой ответ. – An0n 28 February 2018 в 07:51

Вот так:

mkdir ./filename/ && mv ./date-and-time/path/to/path-to-your-folder/* ./filename/date-and-time

Edit:

Если вам нужно создать больше папок, я рекомендую сделать скрипт примерно так:

Перед вами start, я действительно рекомендую вам сделать резервную копию папки, в которой вы пытаетесь сделать это.

cd в папку, в которую вы пытаетесь работать, а затем:

for file in *; do if [[ -f "$file" ]]; then mkdir "${file%.*}" mv "$file" "${file%.*}" fi done Loop над всеми (*) файлами в текущей папке. создайте папку (mkdir) из файла без расширения $ {file%. *} переместите (mv) файл в эту папку.
0
ответ дан 17 July 2018 в 19:50

Я предполагаю, что шаблон для пути всегда ./date-and-time/fixed/path/filename с переменной date-and-time и filename.

date-and-time может быть извлечен через awk:

$ echo './date-and-time/fixed/path/filename' |awk -F "/" '{print $2}' date-and-time

filename немного легче получить, поскольку его можно извлечь из basename:

$ basename ./date-and-time/fixed/path/filename filename

. Из этих двух сегментов кода выполняется непроверенный сценарий для перемещения файлов в который вы описываете при выполнении в .. Пожалуйста, проверьте его перед использованием.

#!/bin/bash for i in ./*/fixed/path/*; do date_and_time=$(echo "$i" |awk -F "/" '{print $2}'); filename=$(basename "$i"); mkdir "$filename"; mv "$i" "$filename"/"$date_and_time"; done;
2
ответ дан 17 July 2018 в 19:50

Вот так:

mkdir ./filename/ && mv ./date-and-time/path/to/path-to-your-folder/* ./filename/date-and-time

Edit:

Если вам нужно создать больше папок, я рекомендую сделать скрипт примерно так:

Перед вами start, я действительно рекомендую вам создать резервную копию папки, в которой вы пытаетесь сделать это.

cd в папку, в которую вы пытаетесь работать, а затем:

for file in *; do if [[ -f "$file" ]]; then mkdir "${file%.*}" mv "$file" "${file%.*}" fi done Loop над всеми (*) файлами в текущей папке. создайте папку (mkdir) из файла без расширения $ {file%. *} переместите (mv) файл в эту папку.
0
ответ дан 23 July 2018 в 20:35
  • 1
    Я надеялся на решение, которое мне не нужно вводить 1000 раз с разными путями и именами файлов. – Charles 28 February 2018 в 07:45
  • 2
    У вас 1000 папок? Вы всегда можете использовать * или вам нужно создать также 1000 новых каталогов? – An0n 28 February 2018 в 07:48
  • 3
    Затем я рекомендую использовать скрипт. Отредактировал мой ответ. – An0n 28 February 2018 в 07:51

Я предполагаю, что шаблон для пути всегда ./date-and-time/fixed/path/filename с переменной date-and-time и filename.

date-and-time может быть извлечен через awk:

$ echo './date-and-time/fixed/path/filename' |awk -F "/" '{print $2}' date-and-time

filename немного легче получить, поскольку его можно извлечь из basename:

$ basename ./date-and-time/fixed/path/filename filename

. Из этих двух сегментов кода выполняется непроверенный сценарий для перемещения файлов в который вы описываете при выполнении в .. Пожалуйста, проверьте его перед использованием.

#!/bin/bash for i in ./*/fixed/path/*; do date_and_time=$(echo "$i" |awk -F "/" '{print $2}'); filename=$(basename "$i"); mkdir "$filename"; mv "$i" "$filename"/"$date_and_time"; done;
2
ответ дан 23 July 2018 в 20:35

Другие вопросы по тегам:

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