Как найти определенные файлы и переместить их в новый каталог в той же команде?

Попробовать cd -P .

tim@ls:~$ mkdir a
tim@ls:~$ ln -s a b

tim@ls:~$ cd b
tim@ls:~/b$ pwd
/home/tim/b

tim@ls:~/b$ cd ..
tim@ls:~$ cd -P b
tim@ls:~/a$ pwd
/home/tim/a

Можно также использовать set -o physical заставить это поведение сохраниться в течение времени жизни рабочей оболочки.

Проверьте https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links для некоторой более хорошей информации.

6
13.10.2013, 02:51
2 ответа

Одна опция состоит в том, чтобы использовать install команда вместо cp. Это имеет опцию создать все ведущие каталоги.

find source -name '*.z' -exec install -D {} dest \;
11
27.01.2020, 20:23
  • 1
    На OSX -d должен использоваться вместо капитала -D. –  ccpizza 28.09.2016, 19:55

Вы не можете передать данные по каналу к mkdir тот путь. Вы могли сделать что-то вроде этого:

find source -name '*.z' -exec sh -c 'mkdir -p newDirectory && cp "$@" newDirectory' _ {} +

или (принимающий имена файлов, не содержащие новые строки)

find source -name '*.z' | while IFS= read -r foo; do 
   mkdir -p newDirectory;
   cp "$foo" newDirectory;
done 

или если Вы только хотите создать один каталог, таким образом, имя всегда является тем же:

mkdir newDirectory; find source -name '*.z' -exec cp {} newDirectory \;
1
27.01.2020, 20:23
  • 1
    Действительно находит на самом деле изменение рабочим каталогом, когда это идет? Разве это не попытается делать каталог в том же месте каждым разом и скопирует все файлы в него? Если бы он хотел их всех в одном каталоге, я не вижу, почему он должен был бы создать каталог, когда он работал... –  kurtm 12.10.2013, 18:56
  • 2
    Там какой-либо путь состоит в том, чтобы сделать первый путь без оператора удара? Возможно переданный по каналу? –  John 12.10.2013, 18:56
  • 3
    @kurtm видит обновленный ответ, и да, по-видимому find изменяет CWD, когда он идет, он создаст каталог в том же месте. –  terdon♦ 12.10.2013, 18:58
  • 4
    @John видит обновленный ответ. Вы не можете передать данные по каналу к mkdir. –  terdon♦ 12.10.2013, 18:58
  • 5
    @terdon Хорошо. Я не был уверен начиная с него, дают пути родственников для вывода. –  kurtm 12.10.2013, 18:59

Теги

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