У меня есть 100 файлов в одной папке, включая папку с именем «target». Я хочу перенести все файлы в этой папке в целевую папку (кроме самой целевой папки).
Есть ли эффективная команда терминала для этого?
Если в вашем каталоге есть только файлы (и цель каталога), просто используйте mv
, а не find
:
mv * target
Он будет жаловаться, что «target» не может будет перемещен сам по себе, но впоследствии все файлы будут в цели.
Это также работает:
find . -maxdepth 1 ! -name target ! -name . -exec mv "{}" target \;
Одним из ключевых преимуществ find
по сравнению с завершением работы bash является то, что вы получаете скрытые файлы одновременно. mv * ...
не будет этого делать.
Возможно, вы могли бы пойти с чем-то вроде:
mv -t target * .[^.]*
Или, как отметил Джеймс, вы могли бы сократить команду поиска, чтобы смотреть только на файлы ... И как указывал LoremIpsum, если существуют миллиарды их использование xargs
было бы несколько более эффективным:
find . -maxdepth 1 -type f -print0 | xargs -0 mv -t target
Используйте это
$ mv target ..
$ mv * ../target
$ mv ../target .